Vim 最快的单词替换方法
Vim fastest way to replace words
有时我发现自己只想替换程序中的 2-3 个长单词,但我发现这样做有点痛苦,只是想知道是否有任何 Vim 向导可以给我一个更快的方法:
var_wanted = {}
some_other_var = {}
def function1():
....
....
some_other_var.append(...)
....
some_other_var.append(...)
some_other_var.append(...)
....
现在假设我想用 var_wanted
替换 some_other_var
,现在通常我这样做的方式是我会去 var_wanted 使用 yiw
复制要注册的单词,然后移动到 some_other_var
的第一个实例,对 select 单词执行 viw
,然后执行 p
将其粘贴并替换单词。但是这个过程是不可重复的,我不能去 some_other_var 的下一个实例并输入 .
因为出于某种原因现在 some_other_var
在我的寄存器中而不是 var_wanted
,我经常这样做,以至于我觉得自己正在失去多年的生命。是的,我知道使用搜索和替换 :%s/some_other_var/var_watned/gc
,但我觉得这个实例用于替换的内容太少了,不值得将整个内容都输入出来。请帮忙
想要的最终产品:
var_wanted = {}
some_other_var = {}
def function1():
....
....
var_wanted.append(...)
....
var_wanted.append(...)
var_wanted.append(...)
....
TL;DR:
var_wanted
上的光标:"ayiw
(拉入寄存器 a)。
光标在some_old_var
上:ciw
Ctrlra
Esc(改变字,插入寄存器a的内容) .
将光标放在下一个 some_old_var
: .
将再次执行上一个操作。
找到比 %s/some_old_var/var_wanted/g
更短 的击键系列将很困难。
because for some reason now some_other_var
is in my register
viwp
隐式删除所选单词。 vim 中删除的文本进入寄存器。您可以使用 viw"_dP
来避免这种情况,它明确地删除到空寄存器中,这样它就不会被复制,然后再放入。键入此 3 次似乎比 %s/
版本更糟糕。
如果打字 var_wanted
和 some_other_var
打扰了您,您可以通过"fyiw
和 "ryiw
当您的光标位于正确的位置时。然后你可以 %s:<C-r>f:<C-r>r:g
做所有的替换(<C-R>
意味着 Ctrlr)。这里的问题是四处移动光标然后猛拉似乎并不比输入单词快多少。
还有c
挂东西。如果你有 some_old_var.
,你可以将光标放在单词上,然后是 ciwvar_wanted
,这将删除 some_old_var
并进入插入模式,你将在其中键入 var_wanted
。这样做的好处是在离开插入模式后,当光标位于 some_old_var
的下一个实例上时,您可以使用 .
并且它会重复整个操作,将 some_old_var
替换为 var_wanted
.
另一个有用的注意事项是,如果 var_wanted
超长(并且已经存在于此文件中),您可以在键入单词的几个字符后使用 C-n
自动完成。完成插入后,这仍然适用于 .
。
如果你真的想避免输入任何数量的 var_wanted
,你可以在插入模式下使用 Ctrlr同样,这意味着您可以通过将光标放在 var_wanted
上并使用 "ayiw
(拉入寄存器 a)然后将光标放在 some_old_var
上并执行 ciw<C-R>a
来拉动 var_wanted
替换它。
只要你要的寄存器是yank寄存器即可:
:%s/some_other_var/\=@0/g
如果您尝试更改大量出现的“some_other_var”
,则上述解决方案很好
您也可以使用“gn”方法,参见:h gn
,在我的例子中我有:
:nnoremap c* *<c-o>cgn
复制“var_wanted”移动到第一个“some_other_var”然后按:
c* ...................... triggers our mapping
<Ctrl-r>0 ................ paste the yank register
<Esc> .................... leave insert mode
. ....................... now press dot as much as you want
要了解有关 gn
技巧的更多信息,请观看这个精彩视频:
http://vimcasts.org/episodes/operating-on-search-matches-using-gn/
有时我发现自己只想替换程序中的 2-3 个长单词,但我发现这样做有点痛苦,只是想知道是否有任何 Vim 向导可以给我一个更快的方法:
var_wanted = {}
some_other_var = {}
def function1():
....
....
some_other_var.append(...)
....
some_other_var.append(...)
some_other_var.append(...)
....
现在假设我想用 var_wanted
替换 some_other_var
,现在通常我这样做的方式是我会去 var_wanted 使用 yiw
复制要注册的单词,然后移动到 some_other_var
的第一个实例,对 select 单词执行 viw
,然后执行 p
将其粘贴并替换单词。但是这个过程是不可重复的,我不能去 some_other_var 的下一个实例并输入 .
因为出于某种原因现在 some_other_var
在我的寄存器中而不是 var_wanted
,我经常这样做,以至于我觉得自己正在失去多年的生命。是的,我知道使用搜索和替换 :%s/some_other_var/var_watned/gc
,但我觉得这个实例用于替换的内容太少了,不值得将整个内容都输入出来。请帮忙
想要的最终产品:
var_wanted = {}
some_other_var = {}
def function1():
....
....
var_wanted.append(...)
....
var_wanted.append(...)
var_wanted.append(...)
....
TL;DR:
var_wanted
上的光标:"ayiw
(拉入寄存器 a)。
光标在some_old_var
上:ciw
Ctrlra
Esc(改变字,插入寄存器a的内容) .
将光标放在下一个 some_old_var
: .
将再次执行上一个操作。
找到比 %s/some_old_var/var_wanted/g
更短 的击键系列将很困难。
because for some reason now
some_other_var
is in my register
viwp
隐式删除所选单词。 vim 中删除的文本进入寄存器。您可以使用 viw"_dP
来避免这种情况,它明确地删除到空寄存器中,这样它就不会被复制,然后再放入。键入此 3 次似乎比 %s/
版本更糟糕。
如果打字 var_wanted
和 some_other_var
打扰了您,您可以通过"fyiw
和 "ryiw
当您的光标位于正确的位置时。然后你可以 %s:<C-r>f:<C-r>r:g
做所有的替换(<C-R>
意味着 Ctrlr)。这里的问题是四处移动光标然后猛拉似乎并不比输入单词快多少。
还有c
挂东西。如果你有 some_old_var.
,你可以将光标放在单词上,然后是 ciwvar_wanted
,这将删除 some_old_var
并进入插入模式,你将在其中键入 var_wanted
。这样做的好处是在离开插入模式后,当光标位于 some_old_var
的下一个实例上时,您可以使用 .
并且它会重复整个操作,将 some_old_var
替换为 var_wanted
.
另一个有用的注意事项是,如果 var_wanted
超长(并且已经存在于此文件中),您可以在键入单词的几个字符后使用 C-n
自动完成。完成插入后,这仍然适用于 .
。
如果你真的想避免输入任何数量的 var_wanted
,你可以在插入模式下使用 Ctrlr同样,这意味着您可以通过将光标放在 var_wanted
上并使用 "ayiw
(拉入寄存器 a)然后将光标放在 some_old_var
上并执行 ciw<C-R>a
来拉动 var_wanted
替换它。
只要你要的寄存器是yank寄存器即可:
:%s/some_other_var/\=@0/g
如果您尝试更改大量出现的“some_other_var”
,则上述解决方案很好您也可以使用“gn”方法,参见:h gn
,在我的例子中我有:
:nnoremap c* *<c-o>cgn
复制“var_wanted”移动到第一个“some_other_var”然后按:
c* ...................... triggers our mapping
<Ctrl-r>0 ................ paste the yank register
<Esc> .................... leave insert mode
. ....................... now press dot as much as you want
要了解有关 gn
技巧的更多信息,请观看这个精彩视频:
http://vimcasts.org/episodes/operating-on-search-matches-using-gn/