我想创建一个 vim 映射,允许运动来控制要输出的文本。似乎没有很多关于这方面的文档,而且我在将vim 帮助页面中的示例调整为我需要的内容时遇到了麻烦。这就是我所拥有的,它没有给出错误但不会替换文本。我错过了什么?
nmap ,s :set opfunc=CustomFunc<cr>g@
function! CustomFunc(type, ...)
let sel_save = &selection
let &selection = "inclusive"
let reg_save = @@
if a:type == 'line'
silent exe "normal! '[V']!sort"
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]!sort"
else
silent exe "normal! `[v`]!sort"
endif
let &selection = sel_save
let @@ = reg_save
endfunction
我用作!sort
测试的一个非常简单的示例。这里的想法是你可以有一个像这样的块:
{
Hello, World!
Hello, Earth!
Hello, Planet!
}
如果您将光标移动到 {} 块中的某处并键入,si{
它会将块替换为
{
Hello, Earth!
Hello, Planet!
Hello, World!
}
解决方法是vi{:!sort<cr>
, 或者如果你有vmap ,s :!sort
then vi{,s
,但最好将它作为运算符映射(更少输入,更灵活等)。