如果在Vim中按 * ,编辑器将在同一文件中搜索下一个术语。它使您无需输入该术语。
有没有一种快速的方法可以用新的术语替换当前光标下的术语?发出命令的一个字符,输入新术语,然后输入。
答案 0 :(得分:98)
只需使用 * 然后:
:%s//new value/
如果未指定模式,则substitute命令将使用上次搜索的模式。
根据配置中gdefault
的值,您可能需要为该命令添加/g
修饰符。
答案 1 :(得分:64)
您可以使用:
:%s/<c-r><c-w>/new value/g
其中<c-r><c-w>
表示字面输入 CTRL - r CTRL - w 以插入光标下的字。
答案 2 :(得分:12)
除了其他答案之外,您还可以通过将以下代码段添加到.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
答案 3 :(得分:5)
答案 4 :(得分:1)
另一种选择是使用gn
:
向前搜索最后使用的搜索模式,例如
n
,然后启动可视模式以选择匹配项。
如果光标位于匹配项上,则从视觉上将其选中。
如果操作员待定,请进行比赛。
例如,“ dgn”会删除下一个匹配项的文本。
如果激活了可视模式,则将选择范围扩展到 下一场比赛。
注意:与n
不同,搜索方向不取决于先前的搜索命令。
因此,如果您将FOO
作为最后一个搜索表达式,则可以用BAR
键入cgnBAR<Esc>
替换其下一个匹配项,并用.
重复以下匹配项。 / p>
如果要将光标下方的单词设置为搜索表达式,可以键入*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>
答案 5 :(得分:0)
这也是我想要的功能!但不仅是光标下方的单词,还包括视觉选择或动作。
结果(并在您的答案基础上),我将此添加到了.vimrc中:
private static final String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
private static final String CHAR_UPPER = CHAR_LOWER.toUpperCase();
private static final String NUMBER = "0123456789";
private static final String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
private static SecureRandom random = new SecureRandom();
public static void main(String[] args) {
for (int i = 0; i < 1; i++) {
System.out.println(generateRandomString(10));
}
}
public static String generateRandomString(int length) {
if (length < 1) throw new IllegalArgumentException();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length());
char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);
sb.append(rndChar);
}
return sb.toString();
}
我现在可以按普通模式按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(
之类的内容,并迅速询问我是否要替换我的选择
(到目前为止,我不知道我是否想要与@Lieven相同的提示...)