Vim重复在单词末尾附加一些东西
在vim中,我经常发现自己想要在源代码中为标识符添加后缀,然后使用“.”在其他标识符上重复它 i、 e.转变: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_ 换句话说,我希望在单词末尾添加
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