如果*在Vim中按,编辑器将在同一文件中搜索该术语的下一个出现。它使您不必键入术语。
有没有一种快速的方法可以用新的术语替换当前光标下的术语?发出命令的一个字符,然后输入新术语Enter。
如果*在Vim中按,编辑器将在同一文件中搜索该术语的下一个出现。它使您不必键入术语。
有没有一种快速的方法可以用新的术语替换当前光标下的术语?发出命令的一个字符,然后输入新术语Enter。
n
我有用,它b
会恢复默认值(单词的开头)#
对我有用,这可以回溯到上一个学期。
n
下一个和N
上一个。它写在我的键盘上,所以我不知道我怎么弄错了。
Answers:
只需使用*,然后:
:%s//new value/
如果您未指定模式,则replace命令将使用最后搜索的模式。根据gdefault
配置中的值,您可能需要/g
向该命令添加修饰符。
new value
包含&
或/
,只需用\进行转义。
:se gd
或:set gdefault
告诉vim对待每个模式,好像它在结尾都有一个/ g修饰符(更确切地说,它会反转/ g标志的含义,因此,如果将它与gdefault
active一起使用,它将禁用该效果)
function_with_a_long_name
并且我必须将所有实例替换为self.function_with_a_long_name
?
除了其他答案,您还可以通过在.vimrc文件中添加以下代码段来进行全局搜索和替换,从而省去一些按键操作。
" Search and replace word under cursor using F4
nnoremap <F4> :%s/<c-r><c-w>/<c-r><c-w>/gc<c-f>$F/i
另一种选择是使用gn
:
向前搜索最后使用的搜索模式,例如使用
n
,然后启动可视模式以选择匹配项。
如果光标位于匹配项上,则可视地选择它。
如果操作员未决,请进行比赛。
例如,“ dgn”删除下一个匹配项的文本。
如果激活了可视模式,则将选择范围扩展到下一个匹配项的末尾。
注意:与n
搜索方向不同,它不取决于先前的搜索命令。
因此,如果您拥有FOO
最后一个搜索表达式,则可以通过BAR
键入替换其下一个匹配项cgnBAR<Esc>
,并使用来重复以下匹配项.
。
如果要将光标下方的单词设置为搜索表达式,可以键入*N
(或*#
)搜索下一个匹配项,然后返回。
例如,如果您的光标FOO
在该行的第一行下方:
<div class="FOO"><span id="FOO"><b>FOO:</b> FOO</span></div>
然后输入*NcgnBAR<Esc>...
,结果就是这样:
<div class="BAR"><span id="BAR"><b>BAR:</b> BAR</span></div>
这也是我也想要的功能!但是,不仅针对光标下方的单词,还针对视觉选择或动作。
结果(并在您的答案基础上),我将此添加到了.vimrc中:
nnoremap <leader>g :set operatorfunc=SubstituteOperator<cr>g@
vnoremap <leader>g :<c-u>call SubstituteOperator(visualmode())<cr>
function! SubstituteOperator(type)
if a:type ==# 'v'
execute 'normal! `<v`>"my'
elseif a:type ==# 'char'
execute 'normal! `[v`]"my'
else
return
endif
let sub = input("substitute '".getreg("m")."' with ... : ")
execute "%s/".getreg("m")."/".sub."/gc"
endfunction
我现在可以按喜欢的东西\sw
,\sf;
或\si(
在正常模式下还是\s
在可视化模式,并得到提示,询问是否有什么我想替换我的选择有。
(到目前为止,我不知道我是否想要与@Lieven相同的提示...)