4

我想将行的全部内容(不包括结束换行符)附加到行本身。我在这里看到了这个解决方案:%s/$/\*/g如何在 Vim 的每一行末尾添加一个字符串?

但它将字符 * 附加到行中。我尝试了两者:%s/$/*/g:%s/$/\*/g但结果相同。

我正在使用 VIM - Vi 改进版 7.3.46

PS:看来,作为新用户,我不允许在此处发表此问题作为评论。谢谢。

4

4 回答 4

10

再一次,命令模式被大大低估了:

:t.|-j

完毕

更新我在另一条评论中看到您想对某个范围执行此操作。这也很容易。见下文

这基本上是 Ex 等价于yyPJx except

  1. 它不会破坏任何寄存器
  2. 不会移动“0-”9 寄存器
  3. 不会影响当前搜索和/或搜索历史(如:%s基于答案)
  4. 可以通过执行立即重复@:- 没有宏,没有映射:)
  5. 将导致原子撤消(而该yyPJx方法将导致 3 个单独的撤消步骤)

解释:

  • :t是同义词:copy
  • :j简称:join
  • :-j是 的缩写:-1join,意思是:将上一行与它的后继连接起来

注意:如果您想保留前导空格(例如yyPgJx代替yyPgJx),请使用:

:t.|-j!

使用视觉选择类型更新重复

:'<,'>g/^/t.|-j

对视觉选择中的每一行重复它。(当然:'<,'>是在可视模式下自动插入)。这种方法的另一个好处是您可以轻松地指定要复制哪些行的过滤器:

:g/foo/t.|-j

将“复制”当前缓冲区中包含“foo”的所有行(请参阅windo、bufdo、argdo 以将其扩展到大量缓冲区而不会出汗)。

于 2012-11-07T23:31:12.217 回答
6

您可以使用此替换:

:s/^.*$/&&
  • ^.*$表示“无论 ( .*) 位于行的开头 ( ^) 和结尾 ( $) 之间”。
  • &表示匹配的文本,所以我们用它自己替换整行,然后再替换它自己。

编辑

Ingo 的评论很到位::s/.*/&&用更少的打字做同样的事情。

于 2012-11-07T15:37:01.897 回答
1

转到要附加到自身的行。然后输入: 0y$$p

解释:
0 - 到行
首 y$ - 将光标处的所有内容拉到行尾
$ - 到行尾
p - “放置” yank 缓冲区

于 2012-11-07T15:34:32.433 回答
1

你为什么不试试:yyPJx

这会将当前行的副本附加到其自身。

你甚至可以:

noremap ,l yyPJx

如果你.vimrc想映射一个击键来完成这个。

于 2012-11-07T15:35:04.873 回答