Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Python Vim替换单词的最快方法_Python_Search_Vim_Replace_Text Editor - Fatal编程技术网

Python 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

有时我发现自己想在程序中只替换2-3个长单词,我觉得这样做有点痛苦,只是想知道是否有Vim向导可以为我提供更快的方法:

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 use
yiw
复制要注册的单词,然后移动到
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
Ctrl
ra
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可能会有点紧张。我把它留给读者作为练习