Vimは、を除くすべてのファイルタイプでautocmdを実行します


81

書き込む前にファイルの末尾の空白を削除するVimautocmdがあります。これはほぼ100%必要ですが、無効にしたいファイルタイプがいくつかあります。従来の通念は、autocmdを実行するファイルタイプをコンマ区切りのリストにリストすることです。例:

autocmd BufWritePre *.rb, *.js, *.pl

しかし、この場合、それは面倒です。

パターンに一致するファイルを除くすべてのファイルに対してautocmdパターンを一致させる方法はありますか?ドキュメントにNOTマッチャーに相当するものが見つかりません。

回答:


66

*.rbファイルタイプではありません。これはファイルパターンです。 rubyはファイルタイプであり、.rb拡張子のないファイルに設定することもできます。したがって、最も必要なのは、autocmdが呼び出す関数で、操作すべきでないファイルタイプをチェックし、空白を削除します。

fun! StripTrailingWhitespace()
    " Don't strip on these filetypes
    if &ft =~ 'ruby\|javascript\|perl'
        return
    endif
    %s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()

evanの答えに基づいて、バッファローカル変数をチェックし、それを使用してストリップを実行するかどうかを決定できます。これにより、通常は削除するファイルタイプのバッファを削除したくない場合に、1回限りの無効化を行うこともできます。

fun! StripTrailingWhitespace()
    " Only strip if the b:noStripeWhitespace variable isn't set
    if exists('b:noStripWhitespace')
        return
    endif
    %s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()
autocmd FileType ruby,javascript,perl let b:noStripWhitespace=1

1
そうです、特定のファイル拡張子を除外し、説明の用語を間違いなく誤用するパターンを望んでいました。私がワンライナーを望んでいた間、ロジックを関数でラップしてそれを呼び出すことはそれほど粗末ではありません。ありがとう!
jerodsanto 2011年

vimの設定をよりモジュール化したい場合let b:noStripWhitespaceは、ファイルタイププラグインセクションのファイルに設定を追加できます。git commitの末尾の空白の削除を無効にするには、Fxに行を追加し~/.vim/ftplugin/gitcommit.vimます。
flyingdutchman

58

1行の方法の別の選択肢:

let blacklist = ['rb', 'js', 'pl']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like

次に、ブラックリストにあるものを除くすべてのファイルタイプに対して好きなことを行うことができます。


15

最も簡単な方法は、1つのファイルタイプのローカル変数をtrueに設定することです。次に、その変数がfalseの場合(他のすべてに設定されている場合)または存在する場合(事前設定する必要がない場合)にautomcommandを設定します。

autocmd BufWritePre *.foo let b:foo=true

if !exists("b:foo")
    autocmd ...
endif

コメントに基づいて変数プレフィックスを変更


1

これSyntaxは、パターン(<match>)が単なるファイルタイプである自動コマンドで機能します。それはすべてのrstファイルを除外します:

au Syntax *\(^rst\)\@<! …

1

.vimrc設定ファイルは起動時に1回だけ実行されます。したがって、この時点でifテストを実行すると、Pythonファイルが現在編集されていないため、機能しません。

ただし、.vimrcを使用して、自動動作を設定できます。これは、vimが特別な条件に遭遇するたびに実行する処理です。「新しいファイルが編集中であり、そのファイルタイプは「python」です」という条件が考えられます。:h:auを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.