![类似于 Vim 中的 J 命令,但采取动作](https://linux22.com/image/1443496/%E7%B1%BB%E4%BC%BC%E4%BA%8E%20Vim%20%E4%B8%AD%E7%9A%84%20J%20%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%BD%86%E9%87%87%E5%8F%96%E5%8A%A8%E4%BD%9C.png)
我喜欢J
连接多行的命令,但不喜欢计算要连接多少行。我更喜欢给出一个动作。这可以用 来伪造V{motion}J
;有没有一种方法不涉及进入可视模式(因此破坏寄存器*
)?
答案1
我认为没有默认的连接运算符。但您可以使用此代码,来自关于同一主题的旧 vim 线程:
nnoremap J :set operatorfunc=Joinoperator<CR>g@
nnoremap gJ :set operatorfunc=GJoinoperator<CR>g@
onoremap J j
func! Joinoperator(submode)
'[,']join
endfunc
func! GJoinoperator(submode)
'[,']join!
endfunc
请注意,使用此代码片段将无法用于J
连接一对线 - 而必须使用Jj
(或JJ
由于omap J j
)。
答案2
您可以执行以下操作:
:.,/pattern/join
本质上你是在告诉 Vim 连接一系列行,.
即光标所在的当前行,以及第一个匹配的最后一行pattern
。