Vim:视觉模式命令问题



我只是尝试对在视觉模式下选择的文本执行一些命令。如果我选择一些文本&然后按y(表示猛拉)或d(表示删除),它会猛拉或删除所选文本
然而,我需要能够从命令行完成这项工作(因为我正在编写一个函数,我将重新映射到我的一个键)
然而,当我从视觉模式进入命令行时,默认情况下'<,'>在那里,所以我只尝试在它的末尾附加y或d,留下:'<,'>d
然而,这个问题是它删除了视觉选择所在的整行。我只想删除我在这行中所做的选择
我试着看http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection但我尝试的似乎都不起作用
我确信这一定很简单,但我不知道是什么。如有任何帮助,我们将不胜感激。

所有Vim原生ex命令都在行上工作。我想你可以扭转这种趋势。然而,您似乎只是想创建一个命令,以便映射一些键。您可能只想直接调用函数,或者创建<Plug><SID>映射。

直接调用函数

xnoremap * :<c-u>call YourFunctionGoesHere<cr>

这里使用:<c-u>call的秘密酱汁。您可能希望在函数中使用:normal! gv

使用<Plug>

下面是一个快速的直观启动示例:

function! s:vstar()
  let reg = @@
  normal! gvy
  let @/ = 'V' . substitute(escape(@@, ''))
  let @@ = reg
endfunction
xnoremap <Plug>(vstar) :<c-u>call <SID>vstar()<cr>/<c-r>/<cr><cr>

这展示了如何创建<Plug>映射,该映射展示了如何调用函数,这与直接调用函数的示例相同。<SID>/s:的使用确保了函数对于当前脚本是"namespace'd"。

现在,您只需将*映射到<Plug>映射,就像在~/.vimrc文件中一样:

xmap * <Plug>(vstar)

这就是Vim插件创建映射的方式。学习Vim插件的一个好的起点是:h write-plugin,并查看一些非常流行的Vim插件。我建议你看看Tim Pope或Ingo Karkat的插件,因为它们都是非常多产的作者。

有关更多帮助,请参阅:

:h <Plug>
:h <SID>
:h using-<Plug>
:h write-plugin
:h c_ctrl-u
:h :norm

最新更新