如何在VIM的命令行上指定"光标下的单词"?

时间:2020-03-05 18:49:01  来源:igfitidea点击:

我想编写一个在VIM中指定"光标下的单词"的命令。例如,假设我将光标放在一个单词上,然后使它出现两次。例如,如果单词是" abc",而我想要" abcabc",则可以输入:

:s/\(abc\)//

但是然后,我希望能够将光标移动到" def",并使用相同的命令将其更改为" defdef":

:s/\(def\)//

如何在命令行中编写命令,以便做到这一点?

:s/\(*whatever is under the commandline*\)/

解决方案

回答

<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>\)/

回答

我们需要在映射中转义反斜杠。我们也可以在映射中包含替换字符串。

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/\1\1<cr>

回答

ywPx

将按照描述进行。

ywPxw

还将光标移至下一个单词。

回答

yiwP

yiw:提取内部单词(光标下方的单词)。此命令还将光标移动到单词的开头。

P:粘贴在光标之前。

然后,我们可以将例如<< ALT> D`映射到以下命令:

:nmap < ALT >-D yiwP

回答

另一种简单的方法是使用*命令。

在常规模式下,输入单词时,键入

*:s//
*@:
qd*:s//
@d
:help c_CTRL-R
<Enter>q
<Enter>

*是使搜索模式成为当前单词(例如\ <abc >)。

:s //使用当前的搜索模式进行替换,替换为\ 0
section是匹配的字符串。

然后,我们可以通过再次输入相同的内容或者通过键入

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>

@:仅重复最后一个ex命令,不需要<Enter>,在这种情况下是替换。

我们还可以使用q命令记录一个快速宏来执行此操作

##代码##

然后通过键入将其重复到内心满意

##代码##

超过一个字时,我们想加倍。由于这仅比以前的解决方案少一个字符,因此除非我们将在双倍词间执行其他前命令,否则这对我们来说是不值得的,这将改变@:的行为。

回答

在命令行模式下,CTRL+R``CTRL+W会在光标下方插入单词。

有关所有其他特殊寄存器的列表,请参见c_CTRL-R的帮助:

##代码##

回答

##代码##