vimで条件付き検索と置換?

vimで条件付き検索と置換?

一行にコメントを付けてコメントを解除したいとしましょう。

私もできることを知っています

:s!^!//!

それから

:s!^//!!

さて、これを線として使用したい場合はどうすればよいですか?

もともと、もし行は次から始め//て削除します。その他追加してください。

このコマンドを2つではなく1つのショートカットにマップしたいと思います。

ベストアンサー1

私はこれを直接行うことができないと確信しています。しかし、私はあなたのために機能を思いついた。これをあなたの~/.vimrc

function! Toggle()
    s!^\(\s*/\?[^/\s]/\?\)!xxx//\1!e
    s!^\(\s*\)//!\1!e
    s!^xxx//!//!e
endfunc

(これを行うと、すでにxxx//行の先頭にある内容が変更されますが、//これはほとんど発生しないようです):call Toggle()。以下ではこれをCtrl+にマップします/。もちろん、必要なキーの組み合わせに置き換えることができます(他の組み合わせにマッピングするのに役立つかどうかを尋ねます)。また、これを次の項目に入れてください~.vimrc

nnoremap <C-/> :call Toggle()<CR>
vnoremap <C-/> :call Toggle()<CR>
inoremap <C-/> <Esc>:call Toggle()<CR>i

Ctrl+ は、それぞれ/一般、視覚、挿入モードの機能にマップされます。挿入マッピングは挿入モードに戻りますが、カーソルは行の先頭に移動します。通常のパターンを維持するには、行のi末尾から削除するだけですinoremap

(スペースを処理するように更新されました。//スペースを削除した後は常に行の先頭に挿入します)

おすすめ記事