Vim:可视模式命令问题

时间:2014-11-11 23:46:04

标签: vim

我只是尝试对在可视模式下选择的文本执行一些命令。 如果我选择一些文字&然后按y(对于yank)或d(对于删除),它会拉动或删除所选文本
但是我需要能够从命令行执行此操作(因为我正在编写一个函数,我将重新映射到我的一个键)。
但是,当我从视觉模式'<,'>输入命令行时,默认情况下是这样,所以我只是尝试将y或d附加到它的末尾,只留下:'<,'>d
然而,问题是它删除了视觉选择所在的整行。我只想删除我在该行中做出的选择。
我试过看http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection,但我尝试的任何东西似乎都没有用。
我敢肯定它一定很简单,但我不知道是什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

所有Vim native 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:可确保该功能是&#34;命名空间&#39; d&#34;到当前的脚本。

现在,您可以将*映射到<Plug>映射中的~/.vimrc映射:

xmap * <Plug>(vstar)

这就是Vim Plugin创建映射的方式。学习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