我想在VIM中编写一个指定"光标下的单词"的命令.例如,假设我将光标放在一个单词上,然后让它出现两次.例如,如果单词是"abc"而我想要"abcabc",那么我可以输入:
:s/\(abc\)/\1\1/
但是我希望能够将光标移动到"def"并使用相同的命令将其更改为"defdef":
:s/\(def\)/\1\1/
如何在命令行中编写命令以便执行此操作?
:s/\(*whatever is under the commandline*\)/\1\1
小智.. 119
在命令行模式下,CTRL+ R CTRL+ W将在光标下插入单词.
有关c_CTRL-R
所有其他特殊寄存器的列表,请参阅帮助:
:help c_CTRL-R
hazzen.. 64
是光标下的单词(:help
).
对不起,我应该在这个答案中更加完整.
您可以将命令映射到它,或者懒惰的这一系列键击将起作用:
b #go to beginning of current word yw #yank to register
然后,当你输入你的模式时,你可以点击
它将在你的命令中粘贴第0个寄存器的内容.
您也可以为此命令:
:nmapw :s/\( =expand(" ") \)/
这将映射命中'\'和'w'同时替换你的命令行
:s/\(\)/
我很欣赏这个伟大的答案,但我可能只是因为肌肉记忆而建议`yiw`而不是`byw`.在你的光标已经碰巧出现在单词中的第一个字符的情况下,你必须**省略`b`并简单地键入`yw` vs you**may**省略`i` in`yiw `.事故可能发生,修复错误肯定是更多的关键:) (14认同)
小智.. 27
yiwP
yiw
:Yank内部单词(光标下的单词).此命令还将光标移动到单词的开头.
P
:光标前粘贴.
然后,您可以将eg:映射< ALT > - D
到此命令:
:nmap < ALT >-D yiwP
问题特别是关于从Vim的命令行指定"光标下的单词",而不是从命令模式指定 (3认同)
rampion.. 12
另一种简单的方法是使用该*
命令.
在常规模式下,当超过单词时,键入
*:s//\0\0
*
使搜索模式成为当前单词(例如\
:s//
使用当前搜索模式\0
进行替换,并在替换部分中使用匹配的字符串.
然后你可以重复这种行为,比如单词"def",再次输入相同的内容,或者输入
*@:
@:
只需重复最后一个ex命令,而不需要
您还可以使用该q
命令录制快速宏来执行此操作
qd*:s//\0\0q
然后输入,重复它到你的心脏内容
@d
当你想要翻倍的时候.因为这只比前一个解决方案少一个字符,所以对你来说可能不值得 - 除非你在双语之间做其他的前命令,这会改变行为@:
在命令行模式下,CTRL+ R CTRL+ W将在光标下插入单词.
有关c_CTRL-R
所有其他特殊寄存器的列表,请参阅帮助:
:help c_CTRL-R
是光标下的单词(:help
).
对不起,我应该在这个答案中更加完整.
您可以将命令映射到它,或者懒惰的这一系列键击将起作用:
b #go to beginning of current word yw #yank to register
然后,当你输入你的模式时,你可以点击
它将在你的命令中粘贴第0个寄存器的内容.
您也可以为此命令:
:nmapw :s/\( =expand(" ") \)/
这将映射命中'\'和'w'同时替换你的命令行
:s/\(\)/
yiwP
yiw
:Yank内部单词(光标下的单词).此命令还将光标移动到单词的开头.
P
:光标前粘贴.
然后,您可以将eg:映射< ALT > - D
到此命令:
:nmap < ALT >-D yiwP
另一种简单的方法是使用该*
命令.
在常规模式下,当超过单词时,键入
*:s//\0\0
*
使搜索模式成为当前单词(例如\
:s//
使用当前搜索模式\0
进行替换,并在替换部分中使用匹配的字符串.
然后你可以重复这种行为,比如单词"def",再次输入相同的内容,或者输入
*@:
@:
只需重复最后一个ex命令,而不需要
您还可以使用该q
命令录制快速宏来执行此操作
qd*:s//\0\0q
然后输入,重复它到你的心脏内容
@d
当你想要翻倍的时候.因为这只比前一个解决方案少一个字符,所以对你来说可能不值得 - 除非你在双语之间做其他的前命令,这会改变行为@: