请注意,如果 :echo has('clipboard') 返回0,则从系统剪贴板 will not work 复制/粘贴 . 在这种情况下,vim不会使用 +clipboard 功能进行编译,您必须安装其他版本或重新编译它 . 默认情况下,一些Linux发行版提供了一个最小的vim安装,但通常如果你 install the vim-gtk package 你可以获得额外的功能 .
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Paste from clipboard
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
24 回答
值得一提的是,在使用Vim的OSX上,您可以使用鼠标选择文本,Cmd-C复制到OSX系统剪贴板,复制的文本将在Vim外部的剪贴板中可用 .
换句话说,OSX将其视为常规窗口,这就是备受诟病的Apple“Command”按钮派上用场的地方 .
B-30
继Conner的回答之后,这很好,但插入模式下的
C-R C-p +
和C-R C-p *
有点不方便 . 从命令模式Ditto"*p
和"+p
.一位VIM大师建议如下将
C-v
映射到C-r C-p +
.在设置
:set clipboard=unnamed
之上,你应该使用mvim -v
,如果你在Mac OS X 10.9上的Terminal.app上使用vim,你可以使用brew install macvim
. 默认vim不支持剪贴板选项 ."*
和"+
寄存器用于系统的剪贴板(:help registers
) . 根据您的系统,他们可能会做不同的事情 . 例如,在不使用X11(如OSX或Windows)的系统上,"*
寄存器用于读取和写入系统剪贴板 . 在X11系统上,可以使用两个寄存器 . 有关详细信息,请参阅:help x11-selection
,但基本上"*
类似于X11的PRIMARY选择(通常使用鼠标复制您选择的内容并使用鼠标中键粘贴),"+
类似于X11的CLIPBOARD选择(适当的剪贴板) .如果所有这些都超过你的头,请尝试使用
"*yy
或"+yy
将一行复制到系统的剪贴板 . 假设您有适当的编译选项,那么一个或另一个应该可以工作 . 您可能希望将其重新映射到更方便的地方 . 例如,您可以将vnoremap <C-c> "*y
放在〜/ .vimrc中,以便您可以直观地选择并按Ctrl c来拖动到系统的剪贴板 .请注意,如果
:echo has('clipboard')
返回0,则从系统剪贴板 will not work 复制/粘贴 . 在这种情况下,vim不会使用+clipboard
功能进行编译,您必须安装其他版本或重新编译它 . 默认情况下,一些Linux发行版提供了一个最小的vim安装,但通常如果你 install the vim-gtk package 你可以获得额外的功能 .您还可以查看
:help cb
中描述的'clipboard'
选项 . 在这种情况下,您可以:set clipboard=unnamed
或:set clipboard=unnamedplus
使所有yanking / delete操作自动复制到系统剪贴板 . 在某些情况下,如果您将其他内容存储在剪贴板中,因为它会覆盖它,这可能会带来不便 .要粘贴,您可以使用
"+p
或"*p
(同样,取决于您的系统和/或所需的选择),或者您可以将这些映射到其他内容 . 我明确地键入它们,但我经常发现自己处于插入模式 . 如果您处于插入模式,您仍然可以使用<C-r><C-p>*
或<C-r><C-p>+
将它们粘贴到适当的缩进处 . 见:help i_CTRL-R_CTRL-P
.它's also worth mentioning vim' s
paste
选项(:help paste
) . 这使得vim成为一个特殊的"paste mode",它禁用了其他几个选项,允许您使用终端仿真器或多路复用器熟悉的粘贴快捷方式轻松粘贴到vim中 . 只需输入:set paste
即可启用它,粘贴您的内容,然后键入:set nopaste
以禁用它 . 或者,您可以使用pastetoggle
选项设置切换模式的键码(:help pastetoggle
) . 我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,那么当你完善你的vim印章时,这可能是一个方便的解决方法 .有关更多详细信息,请参阅
:help clipboard
.您可以通过gnome-terminal的快捷方式复制到vim中进行粘贴 . 使文件处于插入模式并使用
Ctrl Shift v .
请事先记住
避免弄乱压痕 .
Linux
在我的Linux系统上,
+
和*
寄存器映射到X11选择,可以使用鼠标中键粘贴 . 当使用:set clipboard=unnamed
和:set clipboard=unnamedplus
时,寄存器映射到剪贴板,可以用CTRL-V粘贴 .具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同 . 不过,它肯定会让你指向正确的方向 .
另见
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
对于我的配置适用于复制和粘贴
这将是您在vimrc中为此目的所需的行:
clipboard
有一个特殊的寄存器用于存储这个选项,它是“*寄存器 . 除非有关所选文本的信息即将更改(例如,在某处单击鼠标左键),或者当另一个应用程序想要粘贴选定的文本 . 然后将文本放在“*寄存器中 . 例如,要剪切一条线并使其成为当前选择/将其放在CLIPBOARD上:
类似地,当您想要粘贴来自另一个应用程序的选择时,例如,通过单击鼠标中键,选择将首先放入“*寄存器,然后像任何其他寄存器一样放入' . 例如,放置选择(CLIPBOARD的内容):
registers E354
Paste from clipboard
Check for X11-clipboard support in terminal
当您想在终端中运行Vim时,您需要查找使用剪贴板支持编译的Vim版本 . 从控制台检查X11-clipboard支持,输入:
如果你看到“xterm_clipboard”,你很高兴 .
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
http://linux.die.net/man/1/xsel
我尝试了上面的建议,但没有一个在我的环境中工作 . (Windows PuTTY克隆ssh)
一些额外的谷歌搜索出现了:https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
其中一条评论建议使用
SHIFT+INSERT
,它可以从我的桌面's clipboard into Vim'缓冲区粘贴 .Ctrl-C
已经在从Vim复制到桌面剪贴板了 .我认为这个问题应该得到一个更客观的答案 .
Entering Paste Mode
ESC
:设置粘贴
按我
SHIFT插入(在剪贴板上复制文本)
Leaving Paste Mode
ESC
:设置nopaste
按我
您粘贴了文本,然后您可以再次键入 .
没有剪贴板所以我想出了使用xsel的替代解决方案:
添加到〜/ .vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
对于vim安装不支持*和注册的人员的快速说明 . 没有必要从剪贴板下载新的vim安装进行粘贴 . 这是另一种方法:
1)安装parcellite(内存占用少的剪贴板管理器);
2)在.vimrc文件中,添加以下内容:
3)重启vim .
现在当您输入:Clip作为ex命令时,剪贴板的内容将粘贴在光标处 . 您还可以将新命令映射到功能键,以便能够通过一次击键执行此操作 .
这适用于我:Ctrl Shift V.
根据@ lis2的答案,我使用了一个更简单的配置,不会强制插入模式结束:
请注意,所有这些都覆盖默认的Vim映射:
v_CTRL-C:停止可视模式
v_CTRL-X:从数字中减去[count]
v_CTRL-V:blockwise可视模式
i_CTRL-V:字面插入下一个非数字,也映射到
i_CTRL-Q
作为替代方案,可以使用分别受"yank","delete"和"put" Vim动词启发的键:
<C-y>
,<C-d>
和<C-p>
. 这些只会覆盖一个默认映射:如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项 . 幸运的是,自制软件可以轻松解决这个问题 .
install vim:
brew install vim --with-lua --with-override-system-vim
install gui verion of vim:
brew install macvim --with-lua --with-override-system-vim
重启终端才能生效 .
将以下行追加到
~/.vimrc
set clipboard=unnamed
现在你可以用
yy
复制vim中的行并在系统范围内粘贴它 .你真正需要的是EasyClip . 它会做到这一点,还有更多......
当我使用未与Gnome集成的Debian vim时(vim --version | grep clip#显示没有剪贴板支持),我可以在按住Shift键并用鼠标选择文本后复制到剪贴板,就像任何其他诅咒计划 . 正如我从@Conner的评论中看到的那样,终端(在我的情况下是gnome-terminal)在感知到我的Shift按下时关闭了它的鼠标事件报告 . 我想基于curses的程序可以在将某个Escape序列发送到终端后接收鼠标事件 .
如果您在Windows上并且想要使用
p
粘贴系统剪贴板的内容,请键入此命令 .这解决了我的问题 .
有两种简单的方法可以做到这一点 . 使文件处于插入模式,1)按下鼠标中间的按钮(滚轮),或2)Ctrl Shift V.
对于某些国际键盘,您可能需要按“空格键才能获得
"
” .因此,在这种情况下,您必须按“Space y或”Space * y进行复制 .
和“空间p或”空格* p粘贴 .
如果你想改变你的vimrc等其他解决方案是好的...但是我想要一个简单的方法来复制 from vim to 我的系统键盘 . 这就是我的想法用 .
选择要使用可视模式复制的文本
v
按
:
(它将自动展开以显示:'<,'>
)键入
y *
ory +
(取决于您的系统)将所选文本拖到系统剪贴板对此最简单的解决方案,也可以通过
ssh
在不同的Linux机器之间工作:检查vim是否支持X-11剪贴板:
vim --version | grep clipboard
. 如果它报告-clipboard
和-xterm_clipboard
,你应该安装vim-gtk
或vim-gnome
(在arch linux上使用gvim)将以下行添加到
.vimrc
:ssh -Y machine
现在,复制和粘贴应该在单个和不同的机器上完全按预期工作,只需使用
y
用于yank和p
用于粘贴 . NB在要使用此功能的所有计算机上修改.vimrc
.如果您先使用鼠标
然后
right click mouse
和缓冲区中的内容将被粘贴