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
5条答案
按热度按时间mbyulnm01#
要获得解决方案,所有学分都要转到User@xolox,他的answer是我开发的,以获得所需的任务:
您可以将
;
Map更改为所需的任何热键。n6lpvg4x2#
您可以添加此Map:
然后当你在可视模式下按下
<F7>
时,vim将在选定的行上进行文本替换。请注意,上面Map中的:s cmd只是示例,它将所有
he
替换为her
,无论he
是否是其他单词的一部分,例如She's
-〉Sher's
fxnxkyjh3#
我觉得你在找这样的东西:
这个
y
返回选中的文本,然后构建一个(不完整,光标在替换部分):%s
命令行。您只需要填写替换部分并按Enter键。开放问题
ingo#selection#Get()
。ingo#regexp#EscapeLiteralText()
。4si2a6ki4#
我看到你已经选择了一个适合你的答案,只是想也离开这个插件在这里:https://github.com/AndrewRadev/multichange.vim .
它基本上做同样的事情。默认情况下只对单词起作用,也允许您选择要在视觉模式下更改的文本。它还具有一些额外的功能,例如打印出在屏幕外进行了多少次替换。
gkl3eglg5#
下面是一个键绑定,用于组合leader键和s键以实现您想要的功能。
使用lua:
在Vimscript中:
这会将所选内容拉到z寄存器,退出可视模式,并准备一个替换命令,将所选内容作为要替换的文本。
使用以下命令设置引线键,在本例中为空格键:
使用lua:
使用Vimscript: