5

行末にセミコロンを追加 (または削除) するのは一般的な操作です。A;ただし、現在のカーソル位置を変更するなどのコマンドは、常に理想的とは限りません。

コマンド (例: ;;) をマップして、セミコロンが行末に表示されるかどうかを切り替える簡単な方法はありますか?

現在、vimrcでこのコマンドを使用して追加しています:

map ;; A;<Esc>
4

2 に答える 2

5

このようなものはうまくいくでしょう

nnoremap ;; :s/\v(.)$/\=submatch(1)==';' ? '' : submatch(1).';'<CR>

これは代替コマンドを使用し、最後の文字がセミコロンであるかどうかを確認し、セミコロンである場合は削除します。そうでない場合は、一致した文字に追加します。これは\=、置換部分で a を使用して vim 式を実行します。

任意の文字と一致させたくない場合は、それを関数でラップして、一致させたい文字を渡すことができます。

function! ToggleEndChar(charToMatch)
    s/\v(.)$/\=submatch(1)==a:charToMatch ? '' : submatch(1).a:charToMatch
endfunction

そして、マッピングはセミコロンを切り替えることになります。

nnoremap ;; :call ToggleEndChar(';')<CR>
于 2013-08-10T00:48:42.867 に答える
3

EOL でセミコロンを削除する必要はないと思いますが、セミコロンを追加するために、

nnoremap ,; m`A;<Esc>``

コンテキストマークを設定し、セミコロンを追加してジャンプします。

于 2013-08-10T08:03:35.353 に答える