如何在复制时清除Vim中的行号?

我将一个文件的一部分代码复制到vim中的另一个部分,我发现每行都有行号,格式不见了,如何设置正确的格式为原点?

喜欢这个:

40 root /opt/release/current/public; 67 41 passenger_enabled on; 68 42 

如果你有行号,我很确定你没有使用Vim的yank / put操作(它们不会复制linen linen,foldcolumn,icons等),因为在编辑缓冲区方面,它们不存在。

我的猜测是你正在使用terminal模拟器,并使用鼠标将东西复制到剪贴板,这可能会select屏幕的“无关”空间(包括最后的虚拟空间,行号,折叠标记等)

你可能有运气设置

 :se mouse+=a 

以便像你期望的那样获得鼠标的行为。 否则,用V <movement>... yy代表yank ,对应于'copy')进行select。

然后在目的地使用p (放在光标处)或P (放在光标前面)

让我知道如果有帮助,或者你需要更多的信息

在Esc模式下,键入:se nonu

这是删除行号最简单的方法,您将能够复制文本没有行号。

如果有人想要一个更快的方法(在Linux上),我已经注意到,在vim中,你可以按住Ctrl并拖动你想要复制的区域,你将避免行号并select你想要的部分。

步骤

  1. ctrl和拖动区域
  2. 释放ctrl
  3. 复制(键盘快捷键或右键单击)

看看有时设置为F11的pastetoggle选项。

作为一种替代方法,你总是可以将要复制的部分写入临时文件( ma ,goto end line,然后使用:'a,.w tempfile ),然后将其读入第二个文件。

为了进一步的调查,你可能想看看autoindent选项。

所有以前input的解决scheme都非常好。 但是,有时你在远程服务器上使用vim(所以你不能使用"+y复制到你的剪贴板)。通常terminal支持复制粘贴操作。

我使用vim输出视觉select到一个新的shell,我可以使用terminalfunction复制文本:

 :'<,'>w ! bash -c cat 

然后我可以很容易地复制输出。

在vim中粘贴的模式相同:

 :r ! bash -c cat 

然后我粘贴并使用Ctrl + d将EOF发送给猫。 这种方法也避免了重新粘贴你粘贴的文本(注意:你可以使用:set pi!来禁止自动缩进)。

一个永久的解决scheme是将下面的代码添加到位于主目录中的.vimrc文件的末尾。

 se mouse+=a 

通过添加这个,你将能够只select文本,而不是行号,如下图所示:

在这里输入图像说明


如果你的主目录没有得到你的.vimrc文件(我遇到这个问题),在vi编辑器中input命令:scriptnames ,它会显示你的.vimrc文件的位置。 参考

我将下面的命令映射到一个键。
它删除复制行号周围的空白。
它忽略了行文本和任何后面的空白行。

 :1,$s/^\s*[0-9]\+\s//\|1,$s/^\s*[0-9]\+\n/\r/<cr> 

在Windows VIM GUI上:: :set nu ,然后按住CtrlShift同时用鼠标突出显示所需的文本。 这将行号插入缓冲区。