Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中复制到剪贴板?_Vim_Clipboard - Fatal编程技术网

如何在Vim中复制到剪贴板?

如何在Vim中复制到剪贴板?,vim,clipboard,Vim,Clipboard,是否可以直接从Vim复制到剪贴板yy仅将内容复制到Vim的内部缓冲区。我想复制到操作系统的剪贴板。Vim中是否有任何此类命令,或者您只能在Vim中拖动内容?使用寄存器“+复制到系统剪贴板(即”+y而不是y) 同样,您可以从“+粘贴以从系统剪贴板获取文本(即“+p而不是p)。寄存器将执行此操作。在Windows中,+和*是等效的。在unix中,+和*之间存在细微的区别: 在Windows下,*和+寄存器 它们是等价的。对于X11系统, 尽管如此,它们却有所不同。对于X11系统, *是选择,+是剪切

是否可以直接从Vim复制到剪贴板<代码>yy仅将内容复制到Vim的内部缓冲区。我想复制到操作系统的剪贴板。Vim中是否有任何此类命令,或者您只能在Vim中拖动内容?

使用寄存器
“+
复制到系统剪贴板(即
”+y
而不是
y


同样,您可以从
“+
粘贴以从系统剪贴板获取文本(即
“+p
而不是
p
)。

寄存器将执行此操作。在Windows中,
+
*
是等效的。在unix中,
+
*
之间存在细微的区别:

在Windows下,*和+寄存器 它们是等价的。对于X11系统, 尽管如此,它们却有所不同。对于X11系统, *是选择,+是剪切缓冲区(如剪贴板)。

*
可能是您大多数时候想要的,所以我使用
*
,因为它在两种环境中都能正常工作

在Linux发行版中,您必须首先安装
vim gtk
(又称
gvim
)才能获得剪贴板功能。这是因为非gtk vim通常在没有X11支持的情况下编译。这是为了允许它在仅控制台的机器(通常是服务器)上运行


对于那些在拉或放时对如何使用寄存器感到困惑的人,你只需写
,然后写寄存器的名称。因此,要将某些内容复制到剪贴板寄存器,你需要键入
”*y
,然后键入
”*p
(来源:Kyle Mathews)

如果您使用的是GVim,您还可以
设置guioptions+=a
。这将触发在视觉模式下突出显示的文本自动复制到剪贴板。

缺点:请注意,在这种情况下,高级剪贴板管理器(具有历史记录)将获取您的所有选择历史记录…

我无法复制到剪贴板的系统,因为我的~/.vimrc文件中有此项:

 if has('mouse')
   set mouse=a
 endif
但如果您接下来添加这一行,它将允许您只需Ctrl+c即可将所选内容输入剪贴板

vmap <C-c> "+y
vmap“+y

原始讨论和更多详细信息:

在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴

在Windows集合上:

set clipboard=unnamed
在Linux上(vim 7.3.74+):

注意:您可能需要使用最新版本的Vim才能使其正常工作


在Mac上的OSX上

  • 复制所选部分:目视选择文本(在正常模式下键入
    v
    v
    ) 模式)和类型
    :w!pbcopy

  • 复制整个文件
    :%w!pbcopy

  • 从剪贴板粘贴
    :r!pbpaste

在大多数Linux发行版上,您可以替换:

  • pbcopy
    以上带有
    xclip-i-sel c
    xsel-i-b
  • pbpaste
    使用
    xclip-o-sel-c
    xsel-o-b

    --注意:如果这些工具(
    xsel
    xclip
    )都没有预装在发行版上,您可能可以在repos中找到它们

@Jacob Dalton在评论中提到了这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持来编译,以使这里提到的任何建议都能起作用。默认情况下,我的在MacOSX上没有这样配置,我必须重建vim。使用此命令可以确定您是否拥有它
vim--version | grep'clipboard'
<代码>+剪贴板意味着你很好,这里的建议对你很有用,而
-剪贴板
意味着你必须重新编译和重建vim。

我在.vimrc中写了一行简单的代码来实现复制。希望这对别人有帮助。不幸的是,我的vim没有安装剪贴板支持,因此这些建议对我都不起作用。基本上,将这一行粘贴到.vimrc中:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
map y:e~/clipsongzboardP:w!pbcopy:删除!

如果您想了解这一功能的详细信息,您可以在

总结中了解这一功能,让新手更容易理解

要复制当前行,请在命令模式下键入:

"*yy
要复制整个文件/缓冲区,在命令模式下,首先通过
gg
转到开头,然后键入

"*yG

如前所述,这需要
+clipboard
vim--version
,这表明剪贴板支持的可用性,
-clipboard
表示否。

如果您的vim碰巧没有
+xterm_clipboard
选项进行编译,就像Debian和我猜Ubuntu中默认的那样,您可以将所选内容或整个缓冲区传送到处理桌面剪贴板的外部程序。对于
xclip
(您可能需要在前面安装),命令将是
:w!xclip-sel clip

我的解决方案是安装附加的vim,其中包括剪贴板选项:

sudo apt-get install vim-gnome

也许有人会发现它很有用。我想保持独立于X剪贴板,并且仍然能够在两个运行的Vim之间复制和粘贴一些文本。这段小代码将所选文本保存在temp.txt文件中以便复制。将下面的代码放入.vimrc。使用CTRL-c CTRL-v来执行该作业

虚拟地图:w!cp/dev/null~/temp.txt&&cat>~/temp.txt


诺雷马克:r!cat~/temp.txt

对于某些国际键盘,您可能需要按“+空格键以获取

因此,在这种情况下,您必须按“Space+y”或“Space*y”


  • set clipboard=unnamed
    放入
    vimrc
  • 选择要在
    视觉模式下复制的内容(按v键输入)
  • 返回到正常模式(按esc键),按y键复制
  • 如果要从操作系统的剪贴板粘贴内容,请在Vim
    Normal
    模式下按p/p
    如果你不想为vim使用任何图形界面,而你更喜欢保持机智
    sudo apt-get install vim-gnome
    
    alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
    
    vim --version | grep clip
    -clipboard       +insert_expand   +path_extra      +user_commands
    +emacs_tags      -mouseshape      +startuptime     -xterm_clipboard
    
    vim --version | grep clipboard
    +clipboard       +insert_expand   +path_extra      +user_commands
    +emacs_tags      +mouseshape      +startuptime     +xterm_clipboard
    
    vim --version | grep .xterm_clipboard -o 
    
    vim --version
    
    # Create the directories you need
    $ sudo mkdir -p /opt/local/bin
    # Download, compile, and install the latest Vim
    $ cd ~
    $ git clone https://github.com/vim/vim.git
    $ cd vim
    $ ./configure --prefix=/opt/local
    $ make
    $ sudo make install
    # Add the binary to your path, ahead of /usr/bin
    $ echo 'PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
    # Reload bash_profile so the changes take effect in this window
    $ source ~/.bash_profile"
    
    set clipboard=unnamed
    
    map <C-y> :w !xclip -sel c <CR><CR>
    
    #rangecp copy lines from n1 to n2 from a given file to clipboard
    function rangecp()
    {
        if [ -f $1 ]
        then
            if [ ! -z $3 ]
            then
                diff=$(($3 - $2 + 1))
                #diff=`expr $3 - $2 + 1`
                tail -n +$2  $1 | head -n $diff | xclip -sel clip
            elif [ ! -z $2 ]
            then
                tail -n +$2  $1 | xclip -sel clip
            else
                echo "Provide a range from [n1] lines to [n2] lines"
            fi
        else
            echo "[ $1 ] file doesn't exist"
        fi
    }
    
    rangecp filename.txt 50 89
    rangecp filename.txt 50