我想在VIM中编写一个指定"光标下的单词"的命令.例如,假设我将光标放在一个单词上,然后让它出现两次.例如,如果单词是"abc"而我想要"abcabc",那么我可以输入:
:s/\(abc\)/\1\1/
Run Code Online (Sandbox Code Playgroud)
但是我希望能够将光标移动到"def"并使用相同的命令将其更改为"defdef":
:s/\(def\)/\1\1/
Run Code Online (Sandbox Code Playgroud)
如何在命令行中编写命令以便执行此操作?
:s/\(*whatever is under the commandline*\)/\1\1
Run Code Online (Sandbox Code Playgroud)
小智 119
在命令行模式下,CTRL+ R CTRL+ W将在光标下插入单词.
有关c_CTRL-R所有其他特殊寄存器的列表,请参阅帮助:
:help c_CTRL-R
Run Code Online (Sandbox Code Playgroud)
haz*_*zen 64
<cword>是光标下的单词(:help <cword>).
对不起,我应该在这个答案中更加完整.
您可以将命令映射到它,或者懒惰的这一系列键击将起作用:
b #go to beginning of current word
yw #yank to register
Run Code Online (Sandbox Code Playgroud)
然后,当你输入你的模式时,你可以点击<control-r>0<enter>它将在你的命令中粘贴第0个寄存器的内容.
您也可以为此命令:
:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/
Run Code Online (Sandbox Code Playgroud)
这将映射命中'\'和'w'同时替换你的命令行
:s/\(<currentword>\)/
Run Code Online (Sandbox Code Playgroud)
小智 27
yiwP
Run Code Online (Sandbox Code Playgroud)
yiw:Yank内部单词(光标下的单词).此命令还将光标移动到单词的开头.
P:光标前粘贴.
然后,您可以将eg:映射< ALT > - D到此命令:
:nmap < ALT >-D yiwP
Run Code Online (Sandbox Code Playgroud)
ram*_*ion 12
另一种简单的方法是使用该*命令.
在常规模式下,当超过单词时,键入
*:s//\0\0<Enter>
Run Code Online (Sandbox Code Playgroud)
* 使搜索模式成为当前单词(例如\ <abc \>).
:s//使用当前搜索模式\0进行替换,并在替换部分中使用匹配的字符串.
然后你可以重复这种行为,比如单词"def",再次输入相同的内容,或者输入
*@:
Run Code Online (Sandbox Code Playgroud)
@: 只需重复最后一个ex命令,而不需要<Enter>,在这种情况下是替换.
您还可以使用该q命令录制快速宏来执行此操作
qd*:s//\0\0<Enter>q
Run Code Online (Sandbox Code Playgroud)
然后输入,重复它到你的心脏内容
@d
Run Code Online (Sandbox Code Playgroud)
当你想要翻倍的时候.因为这只比前一个解决方案少一个字符,所以对你来说可能不值得 - 除非你在双语之间做其他的前命令,这会改变行为@: