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


71

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

像这样:

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

格式是什么意思?Vim根本不支持格式化文本。
唐·雷巴

抱歉,格式表示空格和行号
为什么

Answers:


95

如果您有行号,我很确定您没有使用Vim的yank / put操作(这些操作永远不会复制行号,foldcolumn,图标等),因为就编辑缓冲区而言,它们不存在。

我的猜测是您正在终端仿真器中工作,并使用鼠标将内容复制到剪贴板,剪贴板可能会选择屏幕的“外部”空间(包括末尾的虚拟空间,行号,折叠标记等)

您可能有好运气

:se mouse+=a

为了获得您期望的鼠标行为。否则,请使用V<movement>...yy代表yank,对应于“副本”)进行选择

然后在目标上使用p(放置在光标上)或P(放置在光标之前)

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


49
yank +粘贴操作在vim中运行良好,但是粘贴到另一个编辑器或远程终端又如何呢?
Rohit 2015年

7
使用Ctrl + Shift +单击以选择文本。
nawesita

@nawesita很好的提示。这在很大程度上取决于所使用的终端仿真器,仅此而已。但它也可能是有用的,即使Vim不是参与
sehe

3
请记住,这:set mouse+=a将使您遇到剪贴板问题
Stelios Adamantidis

1
@Mahdimehrabi,您尝试过:se mouse-=a吗?(我错失了一些有关切换的信息,请参阅:help :set^=
sehe 20'Nov

40

在普通模式下,键入 :se nonu

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


Esc模式?现在有一个我以前没有探讨过的Vim模式(我认为您可能指的是“ Ex”模式,尽管建议的命令建议您确实从“正常”模式开始)
12

13
他的意思是“正常模式”。如果您处于插入模式(或其他任何模式),请按Esc返回正常模式。
Asenar

32

万一有人想要一种更快的方式(无论如何在Linux上),我注意到在vim中,您可以按住ctrl键并在要复制的区域上拖动,这样就可以避免行号并选择想要的部分。

脚步

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

vim在做什么?当我按住ctrl时,我会右键单击。任何其他键,我仍然可以获得行号。

嗯,在右键单击之前要放开ctrl吗?另外,我正在使用Linux。
sij_a

2
我喜欢这个答案。在Mac上,您按住Option(alt)而不是ctrl。突出显示的区域将类似于小写v模式下的视觉选择。
史蒂夫(Steve)

太棒了!我也习惯打字:se nonu。另一个家伙给的答案。
sij_a

太棒了!
弗兰克

18

永久的解决方案是.vimrc在主目录中文件的末尾添加以下代码。

se mouse+=a

通过添加此选项,您将只能选择文本,而不选择行号,如下图所示:

在此处输入图片说明


如果您没有将.vimrc文件放在主目录中(我遇到了这个问题),请:scriptnames在vi编辑器中键入命令,它将显示.vimrc文件的位置。参考


2
在Linux Mint上也@Ilias Karim。
Lual

的确是ubuntu
Kevin C

这样可以启用鼠标模式,是否可以在不启用鼠标模式的情况下获取复印功能?
zyy


6

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

我使用vim将视觉选择输出到一个新的shell,可以在其中使用终端功能复制文本:

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

然后,我可以轻松复制输出。

在vim中粘贴的模式相同:

:r ! bash -c cat

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


4

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

作为替代方案,您始终可以将要复制的部分写入一个临时文件(ma,转到goto结束行,然后使用:'a,.w tempfile),然后将其读取到第二个文件中。

为了进一步研究,您可能需要查看autoindent选项。


1

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


0

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

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

0

您也可以考虑使用sed,并pbcopy到行复制到剪贴板,在那里你可以粘贴到另一个终端或应用Vim之外。

sed -n <line start #>,<line end #>p <file name> | pbcopy


0

在使用Putty的Windows上,我注意到在vim中,您可以按住ALT并拖动到要复制的区域上,这样就可以避免使用行号并选择想要的部分。

步骤

  1. 按住ALT
  2. 拖曳区域
  3. 释放ALT
  4. 使用CTRL + Shift + C进行复制(如果已打开,则单击鼠标右键)

变化:

根据您的特定设置,特定密钥可能会有所不同。如果ALT不起作用,请尝试使用以下键:

  1. CTRL键
  2. CTRL + Shift
  3. ALT + Shift

注意:

如果有人知道其他适用于他们的按键组合,请告诉我,我将与他们一起更新此答案。

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.