:だから疑似コードで、それは次のようになります。次に )
がある場合はmatch()
となります。 がない場合は-1を返し、存在しない場合は)
ポジションがある場合は-1を返します。
^R
を挿入モードで使用すると、 式の結果を挿入できます。次に、伝統的なa?b:c
(ヘルプ expr1
を参照)のテストを使用して、適切な文字(タブまたは移動)を返します。 動きを戻すには、挿入モードで^O
を使用すると、 を挿入しないで通常のモードコマンドを実行できます。技術的には 対話的に実行されている間に、1つのコマンドしか実行できません。しかし、この のケースでは、Vimによって一度に挿入され、一度に という2つのコマンドを実行することができます。f)
から)
とl
に移動してカーソル の位置を調整します。一緒にすべてを置く
:
:inoremap <tab> <c-r>=match(getline('.'), ')') < 0 ? "\t" : "\<c-o>f)l"<cr>
唯一の残りのビットは、このテストはカーソル 位置を考慮していないということです。しかし、match()
が一致の位置を返すので、は結果をgetcurpos()[2]
と比較できます(この 関数のヘルプも参照してください)。
はしかし、それよりも複雑なもののために、私はあなたが、あなた 願い(ヘルプは、特別:h function-list
、あなたの友達です)とマップに この関数を呼び出すようにカーソルの位置を操作する機能で これを構築するお勧めします。
inoremap <tab> <esc>:call InsertSmartTab()<cr>
あなたは ':help search()'を読んだことがありますか? – romainl