我想编写一个在VIM中指定“光标下的单词”的命令。例如,假设我将光标放在一个单词上,然后使它出现两次。例如,如果单词是“ abc”,而我想要“ abcabc”,则可以输入:
:s/\(abc\)/\1\1/
但是然后,我希望能够将光标移动到“ def”,并使用相同的命令将其更改为“ defdef”:
:s/\(def\)/\1\1/
如何在命令行中编写命令,以便做到这一点?
:s/\(*whatever is under the commandline*\)/\1\1
我想编写一个在VIM中指定“光标下的单词”的命令。例如,假设我将光标放在一个单词上,然后使它出现两次。例如,如果单词是“ abc”,而我想要“ abcabc”,则可以输入:
:s/\(abc\)/\1\1/
但是然后,我希望能够将光标移动到“ def”,并使用相同的命令将其更改为“ defdef”:
:s/\(def\)/\1\1/
如何在命令行中编写命令,以便做到这一点?
:s/\(*whatever is under the commandline*\)/\1\1
Answers:
<cword>
是光标下的单词(:help <cword>
)。
抱歉,我在此答案中应该更加完整。
您可以将命令映射到该命令,否则针对懒惰者的以下一系列击键将起作用:
b #go to beginning of current word
yw #yank to register
然后,当您输入模式时,您可以点击<control-r>0<enter>
,它将在命令中粘贴第0个寄存器的内容。
您也可以为此命令:
:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/
它将同时映射击中的'\'和'w'来替换您的命令行
:s/\(<currentword>\)/
yiwP
yiw
:提取内部单词(光标下方的单词)。此命令还将光标移动到单词的开头。
P
:粘贴在光标之前。
然后,您可以将eg:映射< ALT > - D
到以下命令:
:nmap < ALT >-D yiwP
另一个简单的方法是使用*
命令。
在常规模式下,输入单词时,键入
*:s//\0\0<Enter>
*
使搜索模式成为当前单词(例如\ <abc \>)。
:s//
使用当前搜索模式\0
进行替换,并且在替换部分中为匹配的字符串。
然后,您可以通过再次输入相同的内容或通过键入
*@:
@:
仅重复最后一个ex命令,不需要<Enter>,在这种情况下是替换。
您还可以使用以下q
命令记录一个快速宏来执行此操作
qd*:s//\0\0<Enter>q
然后通过键入将其重复到您的内心满意
@d
一句话过后,您想加倍。由于这仅比以前的解决方案少一个字符,因此对您来说可能不值得-除非您在两次加倍单词之间执行其他前命令,这将改变@:
您需要在映射中转义反斜杠。您也可以在映射中包含替换字符串。
:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
ywPx
将按照您的描述进行。
ywPxw
还将光标移至下一个单词。
yiw
过byw
肌肉记忆的不仅是因为。在光标已经恰好位于单词第一个字符的情况下,您必须省略b
,只需键入yw
vs即可省略i
inyiw
。可能会发生事故,而