同じ文字を 2 回挿入したときに関数を呼び出すための Vimscript を少し書き込もうとしましたが、私の特定のケースでは、セミコロンを 2 回挿入して実際にセミコロンを行末に移動する必要がありました。 .
command! Semi call Semi()
inoremap ; <C-O>:Semi2<CR>
function! Semi()
let x = getpos(".")
" If we are in the last column..
if col(".")+1 == col("$")
let insert_semi = getline(".") . ";"
call setline(".", insert_semi)
let x[2] += 1
call setpos(".", x)
return
endif
let char = getline(".")[x[2] - 2]
if char == ";"
" if prev char was a semicolon also, remove and append to the end
else
" insert semicolon normally...
endif
endfunction
私が抱えている問題は、最後の列でこの関数を呼び出すときに、挿入モードを終了してこの関数を呼び出す必要があることです。カーソルは通常モードになり、カーソルを最後の列に移動します。カーソルが行末に追加されたのか、最後の列の前に挿入されたのか、関数呼び出しが終了したときに同じ位置に戻るのかを知る方法はありますか?
挿入マッピングを使用できることはよく知っていますが;;
、Vim が次のキー モードを待機し、記述した内容を表示しないこの動作は嫌いです。この問題は、リストされている私の問題だけでなく、最初の列でも発生するより一般的な問題です。