出力するテキストをモーションで制御できるようにする 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
、vi{,s
これを演算子のマッピングとして使用すると便利です (タイピングが少なく、柔軟性が高いなど)。