Dictionary 如何映射vim视觉模式以替换我选择的文本部分?

Dictionary 如何映射vim视觉模式以替换我选择的文本部分?,dictionary,select,vim,replace,mode,Dictionary,Select,Vim,Replace,Mode,我希望替换我的部分文字,如视觉模式所选。例如: 我有一个简单的文本文件: ------------------ hello there hehe She's not here ------------------ 我需要把他所有的一切都变成她 我想做的不是键入%s命令,而是在视觉模式下: v选择他 按下一些热键,vim提示我输入新文本 我键入新文本,按Enter键,完成。 我想我们可以用vmap吗?但如何实现呢?谢谢 您可以添加此映射: vnoremap <F7> :s/he/&a

我希望替换我的部分文字,如视觉模式所选。例如:

我有一个简单的文本文件:

------------------
hello there hehe
She's not here
------------------
我需要把他所有的一切都变成她

我想做的不是键入%s命令,而是在视觉模式下:

v选择他 按下一些热键,vim提示我输入新文本 我键入新文本,按Enter键,完成。
我想我们可以用vmap吗?但如何实现呢?谢谢

您可以添加此映射:

vnoremap <F7> :s/he/&r/g<cr>
然后,当您在视觉模式下按下时,vim将在选定行上执行文本替换


请注意,上述映射中的:s cmd只是一个示例,它将所有he替换为her,无论他是否是其他word的一部分,例如She's->Sher's

要获得解决方案,所有学分都将转到User@中,我从他那里开发了该任务:

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> y:%s/<C-r><C-r>"//g<Left><Left>
这将拖动所选文本,然后生成一个不完整的文本,光标位于替换零件:%s命令行内。您只需填写替换项并按Enter键

公开问题 删除默认寄存器。您可以使用@答案中的功能,也可以使用my中的IngSelectionGet。 将所选文本用作正则表达式模式。要用作文本,还需要对多行选择中的任何换行符进行转义。同样,我的插件中有一个ingoregexpEscapeLiteralText。
我看到你已经选择了一个适合你的答案,只是想把这个插件留在这里:


它基本上做同样的事情。默认情况下只处理单词,允许您选择要在视觉模式下更改的文本。它还有一些附加功能,比如打印屏幕外的替换数量。

宏呢?回答很好,它解决了我的问题。只是好奇你是如何制作gif文件并上传到stackoverflow的?您使用的git工具的任何屏幕/类型?谢谢。你可以查看这个,了解如何在这个网站上传gif,为了创建一个gif,你可以做一个屏幕广播,然后将它转换成动画图像。