我想创建一个允许运动控制输出文本的vim映射。似乎没有很多关于此的文档,并且我无法将the sample in vim's help page更改为我需要的内容。这是我所拥有的,它不会给出任何错误,但不会取代文本。我错过了什么?在vim map-operator函数中使用外部命令
nmap ,s :set opfunc=CustomFunc<cr>[email protected]
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
然后vi{,s
,但它将作为运营商映射(少打字,更灵活,等等)将是很好的。
代替使用'!',使用'system'函数来转换文本,在这种情况下使用'system'的例子可以在这里找到[http://vim.wikia.com/wiki/Act_on_text_objects_with_custom_functions]。另外,'TextTransform'插件将会保存你不需要手动编写运算符函数 –