如何在当前行后面加入上一行的内容?

10

我知道Vim中的这些命令:

J:将当前行下面的行连接到当前行
-J:将当前行连接到上一行

但是如何将上一行连接到当前行?


10
很抱歉,kddpkJ.......不是一句完整的中文语句或英文语句,也没有上下文可供参考,因此我无法为您提供准确的翻译。请提供更多上下文或明确的短语/句子以获得更好的帮助。 - William Pursell
2
为了节省按键,可以使用 ddkPJ。如果你需要频繁交换行,可以考虑创建像这个技巧中的映射 - Dan Fitch
3个回答

7

您也可以使用 ex 命令

:m-2|j
  • m-2的作用是将当前行移动到其当前位置的上方2行; 这会交换当前行和上一行的位置。
  • j将当前行和上一行连接起来,在两者之间插入一个空格。如果不想要空格,请使用j!
  • |分隔两个ex命令

这个ex命令是以下写法的简化方式

:move .-2
:join  

1

有许多方法可以做到这一点。其中之一是...删除上面的行,并将其附加到下面行的末尾:

k move up one line
^ move to the first printable character
y$ yank to the end of the line
"_d get rid of the now useless line by deleting it into the black hole register
$ move to the end of the line
p put the deleted text

1
首先交换这些行,然后再将它们拼接起来会更容易(就像@WilliamPursell建议的那样)。 - bitmask
是的,我知道。我采用了“字面量”方法。实际上,我也会选择William Pursell的方法。 - romainl
请注意,J在处理空格时与逐字连接不同。也就是说,如果想要J产生的结果,k^d$k$p会产生不同的结果! - bitmask
根据我的经验,J 命令添加的空格几乎总是会成为问题。当我编写文本时还好,但是当我连接 HTML 标签时就很糟糕了。因此,我倾向于使用 :j! 命令。 - romainl
感谢William和romainl!交换?当我在你们的消息中读到交换时,我找到了另一个解决方案。:m .-2 | :normal J - Reman
gJ表示不带空格的J - Dan Fitch

0
我在我的 .vimrc 文件中添加了以下行。现在,在普通模式下,我可以按 @j 或 < leader > j。对我来说,leader 键是空格。我也见过一些人将它设置为“,”。
" join with previous line with @j
let @j="kJ"
nnoremap <leader>j @j

如果您尚未设置领导者,可以像这样将其设置为空格:

let mapleader = " "
let g:mapleader = " "

为什么不跳过 reg 步骤,直接使用 nnoremap <Leader>j kJ 呢?请注意,这与问题中 OPs 的 -J 是相同的。 - D. Ben Knoble
我使用寄存器来在开头进行计数。5kJ的翻译不正确,会将5k和J分别处理,这将会连接当前行上方的两行。而5@j则能正确地将前面的5行连接起来。 - sathishvj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接