如何在vi编辑器中复制粘贴内容


165

我尝试使用Ctrl+ V粘贴vi编辑器文档中的内容,但是Ctrl+ V不能解释为粘贴。


16
请注意,使用Vi的主要原因是未安装Vim。如果安装了Vim,则值得使用它。除了在每个Unix安装中已经存在的Vi之外,Vi并没有真正的优势。我认为学习Vim的最好方法是打开终端仿真器(而不是从Vim内部)并键入,vimtutor它将使您在大约45分钟的时间内达到您可以使用的位置。
本·莫迪凯

1
+1 @BenMordecai-我已经很熟悉vi(从以前开始),包括它方便的sub-shell功能,但是需要刷新。很少的补习。像微风一样穿过它。谢谢。
Cbhihe

Answers:


192

首先,请确保您处于编辑模式(按i)。然后,如果您位于类似的终端仿真器中,则可以使用Ctrl+ Shift+进行粘贴(或从右键菜单中选择“粘贴”)。Vgnome-terminal

您也可以:set paste在粘贴之前输入vim以禁用自动缩进等。然后:set nopaste在粘贴内容之后。

另请在stackoverflow.com上检查此问题以获取更多信息。

如果要复制/粘贴行vim(而不是粘贴剪贴板内容),则需要签出yank命令。这是一个可能有用的备忘单


1
我认为,如果您将鼠标光标放在上面,则无法使用Ctrl + Shift + V粘贴。
Alvin Wong

14
请注意,I区分大小写。小写字母i是进入插入模式的常规方法。大写I将光标移到行的开头,然后使您进入插入模式。
本·莫迪凯

64

与普通文本编辑器(例如Gedit)相比,Vi(和Vim)的工作方式截然不同。它还具有相当陡峭的学习曲线。如果您想学习一些基本命令,请从本交互式教程开始。

但是,回答您的问题。可以通过加号寄存器访问系统剪贴板的内容。因此,要从系统剪贴板粘贴某些内容,可以在“普通”模式下按:("+p不是同时,而是一个接一个)。


3
直到现在我还是不知道。另外,+ 1用于链接另一个很棒的vim教程。
Attila O.

19
说到编辑器的学习曲线,有Blog.thilelli.net/public/store/attached/curves.jpg的 “一些普通编辑器的经典学习曲线” 。
hlovdal

在GNOME终端中,复制和粘贴的快捷方式分别是Ctrl-Shift-C和Ctrl-Shift-V。
Flimm

1
我尝试依次按<kbd>“ </ kbd>,<kbd> + </ kbd>和<kbd> p </ kbd>,也按<kbd>” </ kbd>和<kbd> p < / kbd>,什么也没有发生。我做错了什么?我vi不使用vim
user907860 2013年

1
那是正确的答案。使用例如。Ctrl-Shift-v仅适用于最简单的内容(如果您在终端中,并且忘记了使用,则换行和缩进可能会非常错误set :paste。)
rsenna

29
  1. 如果要复制同一文件中的粘贴内容,请使用yankpaste

  2. 如果要跨终端复制粘贴内容,请打开第一个文件,选中所需的文本,然后在vim中打开第二个文件(例如:tabnew /path/to/second/file),然后按p粘贴它。

  3. 如果要将粘贴内容从vim复制到外部程序,则需要访问系统剪贴板。我假设您使用Ubuntu。GUI版本的vim始终具有剪贴板支持,但是,如果您想从终端上使用Vim,则必须检查X11-剪贴板支持。

    在控制台中,键入:

    $ vim --version | grep xterm
    

    如果找到-xterm_clipboard,则有两个选择:

    1)自己编译vim,并打开xterm_clipboard标志

    2)卸载vim,改为安装gvim(vim-gtk或vim-gnome)。您可以通过从终端调用vim来坚持使用非GUI vim,就像以前一样。这次检查时,您应该找到+ xterm_clipborad

    现在,当您在vim编辑器中的+寄存器中提取一些文本时(例如“ + yy”),它也被复制到系统剪贴板,您可以使用Ctrl+ 从外部程序(如gedit编辑器)中检索该文本V

  4. 如果要将粘贴内容从外部程序复制到vim中,请先通过Ctrl+ 将文本复制到系统剪贴板中C,然后在vim编辑器插入模式下,单击鼠标中键(通常是滚轮)或按Ctrl+ Shift+ V粘贴。

    这是与vim相关的4种基本复制和粘贴条件。我希望这有帮助。


:tabnew / path / to / second / file有什么意义?您可以在第一个文件中进行完全相同的操作(拉/复制/剪切),然后使用:vi / path / to / second / file打开第二个文件并粘贴(p / P)。至少就我而言...还是因为我确实启用了+ xterm_clipboard vim功能?还是还有更多的新功能?
Cbhihe 2014年

1
在Ubuntu上vim-gtkxterm_clipboard支持,而在Fedora xvim上有支持。
icc97

18

当我要将文本粘贴到终端中时,我总是使用Shift+ Insert,在所有终端程序中均可使用。

(这也是为什么我永远都无法获得Insert不按辅助键就无法按下的笔记本电脑的原因)


2
Vi/ Vim!=终端;)
0xC0000022L13年

1
好的,但是它仍然有效:)
Magnus Jonsson

+1这个..你用什么来执行的发言权Ctrl+ACtrl+C也?
奥雅纳(Arup Rakshit)2013年

如果在DE内部使用终端,通常只需要使用鼠标选择文本并使用Ctrl + Shift + C进行复制。
Magnus Jonsson 2014年

Shift + Insert在gvim中也可以使用。(如果有任何区别,我正在运行Ubuntu 13.10。)
eksortso 2014年

10

使用鼠标中心按钮可以将您突出显示的文本插入其他位置。

当您无权访问系统剪贴板时(例如,在远程SSH会话中),此功能很有用。

Vim必须处于编辑/插入模式。


6

输入vi后,按i进入插入模式,右键单击终端,然后单击粘贴。


我以为是小写的i。大写是I做什么的?
Flimm

@Flimm,本·莫迪凯(Ben Mordecai)在另一个回答中的评论中已经对此进行了解释。
sierrasdetandil

我已将答案编辑为小写i。大写字母I将光标移到行的开头,然后再进入插入模式,此处不需要。
Flimm

5

使用yank和复制和粘贴vi中的文本行的详细说明put

(在vi 的命令模式下使用以下命令

复制(YANK)

要在vi中复制一行:

  • 在命令模式下,将光标移动到需要复制的行,然后键入yy或键入Y

要在vi中复制2行:

  • 在命令模式下,将光标移动到需要复制的第一行,然后键入2yy或键入2Y

(同样,可以复制任意数量的行)

要将所有行从当前位置复制到文件末尾:

  • 在命令模式下,将光标移动到需要复制的第一行,然后键入 yG

要将所有文本从当前位置复制到当前单词的末尾:

  • 在命令模式下,将光标移至需要复制文本的位置,然后键入 yw

要将所有文本从当前位置复制到行尾:

  • 在命令模式下,将光标移至需要复制文本的位置,然后键入 y$

粘贴(PUT)

要将文本粘贴到剪贴板中- 光标所在位置之后

  • 在命令模式下,键入 p

要将文本粘贴到剪贴板中- 光标所在的位置之前

  • 在命令模式下,键入 P

1

我遇到了一个问题,因为我的Vim安装不支持剪贴板

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

我安装了vim-gnome(支持剪贴板),然后再次检查:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

现在,我可以分别使用“ + y”和“ + p”进行复制和粘贴了。


这解决了我的问题!
astrojuanlu

1

使用Linux或Mac上的Vim 8+,您现在可以简单地使用操作系统的本机粘贴(ctrl+shift+V在Linux上,cmd+V在Mac上)。不要按i进入插入模式。

它将粘贴操作系统剪贴板的内容,保留空格和制表符,而无需添加自动缩进。这相当于老:set pasteictrl+shift+Vesc:set nopaste方法。

您甚至不再需要安装+clipboardor +xterm_clipboard功能。此功能称为“包围式粘贴”。有关更多详细信息,请参见https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


这就是我要寻找的答案。由于Vim在gnu / linux发行版中不是默认设置,因此即使在ubuntu中也需要安装它。此外,Vi的向上/向下按钮在ubuntu上不起作用,也没有高亮显示。
itsnotmyrealname

0

如果您是rootCtrl+ Shift+V

如果您不是root用户:请居中单击鼠标。


0

我只是想指出,在Windows上通过Git Bash使用Vim,您可以只使用p鼠标或单击鼠标中键,而无需处于插入模式。通过PuTTY使用Vim ,您可以右键单击。并突出显示进行复制。

我注意到这一点是因为我在这里看不到这是Ubuntu的SE。

其他有用的命令:

  • yy(行数)-猛拉(复制)
  • dd(行数)-删除
  • p -在当前行下方粘贴行
  • Shift+ p-在当前行上方粘贴行
  • u -撤消
  • r - 重做
  • i -插入模式
  • v -视觉模式

在Windows Git Bash上,这对我不起作用。您使用的是哪个控制台,minty或Windows cmd?
wisbucky

我相信那是薄荷糖。
泰勒·克里斯蒂安

0

您可以使用Ctrl+ Shift+ V粘贴终端版本的vim,但是对于GUI版本的vim like Neovim-Qt,使用Ctrl+ Shift+ 从系统剪贴板中粘贴文本V根本行不通。您必须访问剪贴板"+"*在vim编辑器中。

在其中添加新的键绑定.vimrc将只是复制/粘贴命令:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.