Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim重复在单词末尾附加一些东西_Vim - Fatal编程技术网

Vim重复在单词末尾附加一些东西

Vim重复在单词末尾附加一些东西,vim,Vim,在vim中,我经常发现自己想要在源代码中为标识符添加后缀,然后使用“.”在其他标识符上重复它 i、 e.转变: foo bar baz faz 致: 我希望能够做到: ea_old<ESC>w.w.w. ea_oldw.w.w。 而不是: ea_old<ESC>wea_old<ESC>wea_old<ESC>wea_old<ESC> ea_oldwea_oldwea_oldwea_oldwea_ 换句话说,我希望在单词末尾添加

在vim中,我经常发现自己想要在源代码中为标识符添加后缀,然后使用“.”在其他标识符上重复它

i、 e.转变:

foo bar baz faz
致:

我希望能够做到:

ea_old<ESC>w.w.w.
ea_oldw.w.w。
而不是:

ea_old<ESC>wea_old<ESC>wea_old<ESC>wea_old<ESC>
ea_oldwea_oldwea_oldwea_oldwea_
换句话说,我希望在单词末尾添加文本,以便在历史记录中显示为可重复的命令。有人知道怎么做吗

我可以做到:

nmap <C-a> ea
nmap-ea
创建一种稍微方便一点的方式,在一个单词的末尾追加,但它只重复“a”。理想情况下,我希望能够重复整个“eaarbirytext”序列

我已经安装了repeat.vim插件并进行了一些修改,但我真的不知道我在vimscript中做什么

明确要求:我希望能够使用任意移动命令跳转,直到光标位于标识符上的某个位置,然后点击“.”重复添加后缀。上述示例旨在作为特例。

ea
\u old
esc.e.e。应该对你有用

另一种可能的解决方案是在搜索和替换命令上使用
c
标志:

:.s/\<[[:alnum:]]\+\>/&_old/gc

我的猜测是,OP用了一个非常简单的例子来说明一个更一般的问题,这个问题可以重新表述为“我想非常容易地重复任意大的命令序列”

对于这一点,有q命令。选择你最喜欢的录音机,说“q”,然后:

qq——开始录音

(在这里做任何复杂的动作…)

q——停止ercording

@q——播放录音

由于我自己在编程时经常使用它,我最终将上面的操作分别映射到键盘上的F2、F3和F4。这允许你在真正的一键击球中重复你的动作。在vimrc中:

nmap <F2> qq
nmap <F3> q
nmap <F4> @q
nmap-qq
nmap q
nmap@q

对于此特定情况,您可以使用搜索和替换:
s//\u old/g

或执行以下操作:g/foo/s/&u old/g@Julian这不会捕捉到
baz
faz
。让它完成所有这些任务的唯一方法是:1)匹配单词边界,或2)在正则表达式中包含您要查找的每个单词。解决方案1似乎没有回答OP的问题(他可能不想在每个单词中添加
\u old
),解决方案2会比较冗长。@Julian,除非您在搜索和替换中使用
c
标记进行单词边界。请看我编辑过的答案。你能澄清一下要求吗?我假设你想选择一个变量并对其进行操作,然后可能再做一个。你可能想锚定搜索,只找到完整的单词;我澄清了要求。很抱歉,我的一行示例有误导性的特殊性。这只适用于当前行(我相信你知道)。@Julian Yeah我认为这是OP想要的,因为他似乎在寻找
ea_oldwea_oldwea_oldwea_oldwea_old
感谢您的回复;我在寻找更一般的东西;我在上面澄清了。感谢您的回复;这是迄今为止最接近的一次。这是更一般的,但您需要在第一次追加之前和之后有远见地点击F1和F2,然后点击F3重复,而不是通常的“我通常避免使用F1,因为这会打开终端的帮助窗口,但这只是一个细节。另外,在复制-粘贴一行(包含一个数字)后加上Ctrl+a有时是一种节省时间的好方法。这就是我在浏览这篇文章时所寻找的。但是,如果单词只是一行的一部分,您还可以添加
\%V
,将其应用于以前在视觉模式下高亮显示的文本:
:s/\%V/\u old/g
:.s/\<[[:alnum:]]\+\>/&_old/g
nmap <F2> qq
nmap <F3> q
nmap <F4> @q