Python Vim替换单词的最快方法
有时我发现自己想在程序中只替换2-3个长单词,我觉得这样做有点痛苦,只是想知道是否有Vim向导可以为我提供更快的方法:Python Vim替换单词的最快方法,python,search,vim,replace,text-editor,Python,Search,Vim,Replace,Text Editor,有时我发现自己想在程序中只替换2-3个长单词,我觉得这样做有点痛苦,只是想知道是否有Vim向导可以为我提供更快的方法: var_wanted = {} some_other_var = {} def function1(): .... .... some_other_var.append(...) .... some_other_var.append(...) some_other_var.append(...) .... 现在让我们假设我想用var\u wan
var_wanted = {}
some_other_var = {}
def function1():
....
....
some_other_var.append(...)
....
some_other_var.append(...)
some_other_var.append(...)
....
现在让我们假设我想用var\u wanted
替换some other\u var
,现在我通常的做法是,我会去var\u wanted useyiw
复制要注册的单词,然后移动到some other\u var
的第一个实例来选择单词,然后执行p
粘贴并替换单词。然而,这个过程是不可重复的,我不能进入下一个“其他变量”的实例并键入
,因为出于某种原因,现在其他变量在我的注册表中,而不是var\u想要的,我经常这样做,以至于我觉得自己在失去生命的岁月。是的,我知道使用search And replace:%s/some\u other\u var/var\u watned/gc
,但我觉得这个实例的替换太少了,不值得把整个内容都输入出来。请帮忙
需要最终产品:
var_wanted = {}
some_other_var = {}
def function1():
....
....
var_wanted.append(...)
....
var_wanted.append(...)
var_wanted.append(...)
....
TL;博士:
光标位于var_-wanted
:“ayiw
(猛拉入寄存器a)。
光标在一些旧变量上
:ciw
Ctrlra
Esc(更改单词,插入寄存器a的内容)。
将光标放在下一个上一些旧的变量:
将再次执行上一个操作
要找到一个比%s/some\u old\u var/var\u wanted/g
短的击键序列将非常困难
因为出于某种原因,现在我的注册表中有一些其他变量
viwp
隐式删除所选单词。vim中删除的文本进入寄存器。您可以使用viw“\u dP
来避免这种情况,它显式删除到空寄存器中,因此不会被复制,然后放入。键入这3次似乎比%s/
版本更糟糕
如果输入的是var\u want
和其他变量
让您感到困扰,您可以在光标位于正确位置时通过“fyiw
和”ryiw
将它们猛拉到寄存器中(让我们使用“f
ind和”r
替换以便于记忆)。然后,您可以只%s:f:r:g
来执行所有替换(
表示Ctrlr)。这里的问题是移动光标,然后猛拉似乎并不比键入单词快多少
还有悬挂的东西。如果您有一些旧的变量
,您可以将光标定位在单词上,然后ciwvar\u wanted
,这将删除一些旧的变量
,并进入插入模式,您可以在其中键入var\u wanted
。这样做的好处是,在退出插入模式后,当光标位于一些旧变量的下一个实例上时,可以使用
,它将重复整个操作,将一些旧变量替换为var
另一个有用的注意事项是,如果var_want
是超长的(并且已经存在于该文件中),则可以在键入单词的几个字符后使用C-n
自动完成。完成插入后,
仍可以使用此选项
如果您确实想避免键入任何数量的var_want
,您也可以在插入模式下使用Ctrlr,这意味着您可以通过将光标放在var_want
上并使用“ayiw
(拖动到寄存器a中)来拖动var_want
然后将光标放在一些旧的\u var
上并执行ciwa
替换它。只要所需的寄存器是yank寄存器:
:%s/some_other_var/\=@0/g
如果您试图更改大量出现的“some\u other\u var”,则上述解决方案是很好的
您也可以使用“gn”方法,请参见:h gn
,在我的情况下,我有:
:nnoremap c* *<c-o>cgn
:nnoremap c**cgn
复制“想要的变量”移动到第一个“其他变量”,然后按:
c* ...................... triggers our mapping
<Ctrl-r>0 ................ paste the yank register
<Esc> .................... leave insert mode
. ....................... now press dot as much as you want
c*………..触发我们的映射
0…………粘贴yank登记簿
退出插入模式
现在尽可能多地按dot键
要了解更多有关gn
技巧的信息,请观看此精彩视频:
如果您还不是vim向导,那么只需使用Vs代码或Pycharm社区,这样的东西在虚拟环境中就容易多了IDE@TomaszSwider我喜欢Vim,我已经使用它一年半了。我对使用笨重的IDE不感兴趣。我正在努力提高Vim。需要正斜杠,var_。cw
来更改单词。var_需要
ESCAPE.n
特别是关于viwp
重击寄存器,使用viw“0p
代替,它不会重击先前从“0
寄存器中拉出的文本。(但请注意,无论如何,您不能用
重复此操作,因为它不是一个命令。)请查看其中提到的”0p
特别是。您可以为此类工作流创建到的映射:nnoremap gs*``:%s///g
。使用*
和backtick backtick可能会有点紧张。我把它留给读者作为练习