[英]How to map vim visual mode to replace my selected text parts?
我希望替换视觉模式选择的部分单词。 例如:
我有一个简单的文本文件:
------------------
hello there hehe
She's not here
------------------
我需要将所有“他”都更改为“她”。
我想做的不是键入%s
命令,而是在可视模式下:
v
选择“他” 我想我们可以用vmap做到吗? 但是如何实现呢? 谢谢!
要获得解决方案的所有学分转到用户@ xolox从他的回答 ,我发展到获得所需的任务:
vnoremap ; :call Get_visual_selection()<cr>
function! Get_visual_selection()
" Why is this not a built-in Vim script function?!
let [lnum1, col1] = getpos("'<")[1:2]
let [lnum2, col2] = getpos("'>")[1:2]
let lines = getline(lnum1, lnum2)
let lines[-1] = lines[-1][: col2 - (&selection == 'inclusive' ? 1 : 2)]
let lines[0] = lines[0][col1 - 1:]
let selection = join(lines,'\n')
let change = input('Change the selection with: ')
execute ":%s/".selection."/".change."/g"
endfunction
您可以更改映射;
您想要的任何热键。
您可以添加此映射:
vnoremap <F7> :s/he/&r/g<cr>
然后,当您在可视模式下按<F7>
时,vim将在选定的行上进行文本替换。
需要注意的是,在:在上述映射S CMD仅仅是例子,它取代所有he
到her
,不管he
是其他词的一部分,如She's
- > Sher's
我认为您正在寻找这样的东西:
:vnoremap <F7> y:%s/<C-r><C-r>"//g<Left><Left>
y
选中文本,然后构建一个(不完整,光标位于替换部分内) :%s
命令行。 您只需要填写替换项,然后按Enter即可 。
ingo#selection#Get()
。 ingo#regexp#EscapeLiteralText()
。 我看到您已经选择了一个适合您的答案,只是想也将此插件留在这里: https : //github.com/AndrewRadev/multichange.vim 。
它基本上做同样的事情。 默认情况下,仅对单词起作用,允许您选择要在可视模式下更改的文本。 它还具有一些其他功能,例如在屏幕外打印多少次替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.