首页 文章

如何从(并复制到)系统的剪贴板制作vim粘贴?

提问于
浏览
643

与其他编辑器不同,vim商店将文本复制到自己的剪贴板中 . 因此,我很难从网页复制一些文本并将其粘贴到当前的工作文件中 . 碰巧我必须打开gedit或手动输入 .

我可以将vim粘贴到系统的剪贴板上吗?

24 回答

  • 6

    值得一提的是,在使用Vim的OSX上,您可以使用鼠标选择文本,Cmd-C复制到OSX系统剪贴板,复制的文本将在Vim外部的剪贴板中可用 .

    换句话说,OSX将其视为常规窗口,这就是备受诟病的Apple“Command”按钮派上用场的地方 .

    B-30

  • 3

    继Conner的回答之后,这很好,但插入模式下的 C-R C-p +C-R C-p * 有点不方便 . 从命令模式Ditto "*p"+p .

    一位VIM大师建议如下将 C-v 映射到 C-r C-p + .

    你可以有:inoremap <C-v> <C-o>“p只有当你真的想要覆盖块状视觉模式时才会插入模式(由于视觉模式不好而不推荐他)你可以有 Map <C-v>”p

  • 1

    在设置 :set clipboard=unnamed 之上,你应该使用 mvim -v ,如果你在Mac OS X 10.9上的Terminal.app上使用vim,你可以使用 brew install macvim . 默认vim不支持剪贴板选项 .

  • 12

    "*"+ 寄存器用于系统的剪贴板( :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 .

  • 31

    您可以通过gnome-terminal的快捷方式复制到vim中进行粘贴 . 使文件处于插入模式并使用

    Ctrl Shift v .

    请事先记住

    :set paste
    

    避免弄乱压痕 .

  • 1

    Linux

    在我的Linux系统上, +* 寄存器映射到X11选择,可以使用鼠标中键粘贴 . 当使用 :set clipboard=unnamed:set clipboard=unnamedplus 时,寄存器映射到剪贴板,可以用CTRL-V粘贴 .

    具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同 . 不过,它肯定会让你指向正确的方向 .

    另见

    http://vim.wikia.com/wiki/Accessing_the_system_clipboard

  • 37

    对于我的配置适用于复制和粘贴

    " copy and paste
    vmap <C-c> "+yi
    vmap <C-x> "+c
    vmap <C-v> c<ESC>"+p
    imap <C-v> <ESC>"+pa
    
  • 0

    这将是您在vimrc中为此目的所需的行:

    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
    
  • 0

    clipboard

    有一个特殊的寄存器用于存储这个选项,它是“*寄存器 . 除非有关所选文本的信息即将更改(例如,在某处单击鼠标左键),或者当另一个应用程序想要粘贴选定的文本 . 然后将文本放在“*寄存器中 . 例如,要剪切一条线并使其成为当前选择/将其放在CLIPBOARD上:

    "*dd
    

    类似地,当您想要粘贴来自另一个应用程序的选择时,例如,通过单击鼠标中键,选择将首先放入“*寄存器,然后像任何其他寄存器一样放入' . 例如,放置选择(CLIPBOARD的内容):

    "*p
    

    registers E354

    > 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
    

    Check for X11-clipboard support in terminal

    当您想在终端中运行Vim时,您需要查找使用剪贴板支持编译的Vim版本 . 从控制台检查X11-clipboard支持,输入:

    % vim --version
    

    如果你看到“xterm_clipboard”,你很高兴 .

    http://vim.wikia.com/wiki/Accessing_the_system_clipboard

    X服务器维护三个选项,分别为:PRIMARY,SECONDARY和CLIPBOARDPRIMARY选择通常用于通过鼠标中键实现复制和粘贴 . 应用程序不常使用SECONDARY和CLIPBOARD选项 .

    http://linux.die.net/man/1/xsel

  • 0

    我尝试了上面的建议,但没有一个在我的环境中工作 . (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复制到桌面剪贴板了 .

  • 0

    我认为这个问题应该得到一个更客观的答案 .

    Entering Paste Mode

    • ESC

    • :设置粘贴

    • 按我

    • SHIFT插入(在剪贴板上复制文本)

    Leaving Paste Mode

    • ESC

    • :设置nopaste

    • 按我

    您粘贴了文本,然后您可以再次键入 .

  • 36

    没有剪贴板所以我想出了使用xsel的替代解决方案:

    添加到〜/ .vimrc:

    vnoremap <C-C> :w !xsel -b<CR><CR>

  • 0

    对于vim安装不支持*和注册的人员的快速说明 . 没有必要从剪贴板下载新的vim安装进行粘贴 . 这是另一种方法:

    1)安装parcellite(内存占用少的剪贴板管理器);

    2)在.vimrc文件中,添加以下内容:

    command Clip r !parcellite -c
    

    3)重启vim .

    现在当您输入:Clip作为ex命令时,剪贴板的内容将粘贴在光标处 . 您还可以将新命令映射到功能键,以便能够通过一次击键执行此操作 .

  • 1

    这适用于我:Ctrl Shift V.

  • 8

    根据@ lis2的答案,我使用了一个更简单的配置,不会强制插入模式结束:

    " Copy and paste
    if has('clipboard') && !has('gui_running')
      vnoremap <C-c> "+y
      vnoremap <C-x> "+d
      vnoremap <C-v> "+p
      inoremap <C-v> <C-r><C-o>+
    endif
    

    请注意,所有这些都覆盖默认的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> . 这些只会覆盖一个默认映射:

    • i_CTRL-P:向后搜索关键字以完成
  • 1

    如果你在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中的行并在系统范围内粘贴它 .

  • 2

    你真正需要的是EasyClip . 它会做到这一点,还有更多......

  • 11

    当我使用未与Gnome集成的Debian vim时(vim --version | grep clip#显示没有剪贴板支持),我可以在按住Shift键并用鼠标选择文本后复制到剪贴板,就像任何其他诅咒计划 . 正如我从@Conner的评论中看到的那样,终端(在我的情况下是gnome-terminal)在感知到我的Shift按下时关闭了它的鼠标事件报告 . 我想基于curses的程序可以在将某个Escape序列发送到终端后接收鼠标事件 .

  • 112

    如果您在Windows上并且想要使用 p 粘贴系统剪贴板的内容,请键入此命令 .

    :set clipboard = unnamed
    

    这解决了我的问题 .

  • 1

    有两种简单的方法可以做到这一点 . 使文件处于插入模式,1)按下鼠标中间的按钮(滚轮),或2)Ctrl Shift V.

  • 0

    对于某些国际键盘,您可能需要按“空格键才能获得 " ” .

    因此,在这种情况下,您必须按“Space y或”Space * y进行复制 .

    和“空间p或”空格* p粘贴 .

  • 760

    如果你想改变你的vimrc等其他解决方案是好的...但是我想要一个简单的方法来复制 from vim to 我的系统键盘 . 这就是我的想法用 .

    • 选择要使用可视模式复制的文本 v

    • : (它将自动展开以显示 :'<,'>

    • 键入 y * or y + (取决于您的系统)将所选文本拖到系统剪贴板

  • 0

    对此最简单的解决方案,也可以通过 ssh 在不同的Linux机器之间工作:

    • 检查vim是否支持X-11剪贴板: vim --version | grep clipboard . 如果它报告 -clipboard-xterm_clipboard ,你应该安装 vim-gtkvim-gnome (在arch linux上使用gvim)

    • 将以下行添加到 .vimrc

    set clipboard = unnamedplus
    设置粘贴

    • 如果您通过ssh在其他计算机上登录,请使用选项-Y: ssh -Y machine

    现在,复制和粘贴应该在单个和不同的机器上完全按预期工作,只需使用 y 用于yank和 p 用于粘贴 . NB在要使用此功能的所有计算机上修改 .vimrc .

  • 16

    如果您先使用鼠标

    :set paste
    

    然后 right click mouse 和缓冲区中的内容将被粘贴

相关问题