2011-04-20 40 views
38

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

这样的:

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

你是什么意思的格式? Vim根本无法使用格式化文本。 – 2011-04-20 09:39:10

+0

对不起,格式表示空格和行号 – why 2011-04-20 09:54:57

回答

55

如果你有行号,我敢肯定你不使用Vim的抽出/放操作(这将从未复制linenumbers,折叠列,图标等),因为就编辑缓冲区而言,它们不存在。我猜你是在一个终端模拟器中工作,并使用鼠标将东西复制到剪贴板,这可能会选择屏幕上的“无关”空间(包括末尾的虚拟空间,行号,折叠标记等) )

您可能有运气才能像你希望它变得鼠标的动作设定

:se mouse+=a 

。否则,执行选择与V<movement>...Ýyyank,其对应于 '复制')

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

让我知道这是否帮助,或者您需要更多的信息

+21

yank +粘贴操作在vim中运行良好,但粘贴到另一个编辑器或远程终端又如何? – Rohit 2015-04-02 03:40:24

4

看一看,有时设定为F11的pastetoggle选项。

作为替代你总是可以写上你要复制到一个临时文件 (ma,转到结束线,然后使用:'a,.w tempfile)的部分,然后读入第二个文件。

有关进一步调查,你可能想看看autoindent选项。

28

在Esc键模式,键入:se nonu

这是为了去除行号的最简单的方法,你就可以没有行号要复制的文本。

+0

Esc模式?现在有一个我以前没有探索过的Vim模式(我认为你可能意思是'Ex'模式,虽然建议的命令建议你真的开始'正常'模式) – sehe 2012-11-13 07:56:15

+8

他意味着“正常模式”。如果您处于插入模式(或任何其他模式),请按Esc键返回正常模式。 – Asenar 2013-10-24 07:43:32

3

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

我使用vim输出可视选择到一个新的外壳,我可以使用终端功能复制文本:

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

然后我可以很容易地复制该输出。在VIM粘贴

相同的模式:

:r ! bash -c cat 

然后我粘贴,并使用按Ctrl +d发送EOF猫。此方法还可以避免重新粘贴您粘贴的文本(注意:您可以使用:set pi!禁用自动缩进)。

0

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

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

在Windows VIM GUI::set nu,然后按住Ctrl键 - 而 突出用鼠标所需的文本。这将行号码 放入缓冲区。

10

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

步骤

  1. Ctrl键并在区域上拖移
  2. 松开Ctrl
  3. 副本(或键盘快捷键或右键点击)
+0

什么是vim?当我按住ctrl时,我最终点击右键。任何其他的钥匙,我仍然得到行号。 – 2016-04-03 20:56:54

+0

嗯,你放开CTRL之前,你右键点击?另外,我正在使用Linux。 – 2016-04-05 13:39:47

+1

我喜欢这个答案。在Mac上,您可以选择(alt)而不是ctrl。突出显示的区域与小写v模式下的视觉选择类似。 – Steve 2016-06-02 15:40:26

3

这样做的一个永久的解决方案是增加下面的代码位于您主目录中的.vimrc文件末尾。

se mouse+=a 

通过增加这一点,你就可以只选择文本,而不是行号如下图所示的图像:

enter image description here


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