重新映射键并获取用户输入

gos*_*iwi 1 vim

所以我发现这样做

:%s//my new string/g
Run Code Online (Sandbox Code Playgroud)

我可以替换当前搜索到的所有文本

Hello, world! la la la Hello.
Run Code Online (Sandbox Code Playgroud)

因此,如果我踩到“Hello”,按 *,然后执行 :%s//Bye/g,我可以将所有“Hello”更改为“Bye”。

我只想做一个小的重新映射来为我做到这一点,我是 vim 新手,所以这对我来说非常困难,我真的不知道如何获取用户输入以进行重新映射。

一位 Reddit 用户推荐了我

nnoremap <c-n> :%s///g<left><left>
Run Code Online (Sandbox Code Playgroud)

所以我可以用来触发替换,但它不起作用,我猜是因为它没有在任何地方指定输入?我想做

<c-n> SOME NEW TEXT <enter>
Run Code Online (Sandbox Code Playgroud)

并用一些新文本替换所有问候语

这可能吗?

Ken*_*ent 5

您需要编写一个小函数来接受用户输入。例如:

function! ReplaceIt()
    call inputsave()
    let replacement = input('Enter replacement:')
    call inputrestore()
    execute '%s//'.replacement.'/g'
endfunction
Run Code Online (Sandbox Code Playgroud)

你可以把它放在你的 vimrc 中。或其他文件并在 vim 中获取它。

那么您可以先搜索(通过/*, #...)然后输入:

:call ReplaceIt()
Run Code Online (Sandbox Code Playgroud)

你会看到输入提示,你只需给出你想要的替换,然后按Enter

您可以为此函数调用创建映射,例如:

nnoremap <leader>r :call ReplaceIt()<cr>
Run Code Online (Sandbox Code Playgroud)