[解決済み] コマンドやローカル vimrc ファイルで複数の vim 設定を切り替えるには?
質問
私はいくつかのグループで仕事をしていますが、それぞれのグループがC言語のタブ、インデント、スペーシングの基準を独自に持っています。
ファイルを編集するときに、それぞれのために別々の選択可能な VIM 設定を持つ方法はありますか。
-
私は次のようなことをします。
set group=1
でコンフィギュレーションを選択します。 - 作業ディレクトリにあるローカルな .vimrc を使って、自動的に設定を行います。
どのように解決するのですか?
まとめ
いくつかの方法があり、そのほとんどが提案されているのですが、おまけで2つほどまとめておこうと思います。
-
ディレクトリごとの vimrc - Vim を正しいディレクトリで起動しなければならないという欠点があります: プロジェクトが
~/project1
にあり、あなたが~/project1/.vim.custom
を実行しcd ~ ; vim project1/file.c
を実行すると、カスタム設定が見つからなくなります。 - モデリン - 非常に効果的ですが、すべてのファイルに追加する必要があるという欠点があります (そして、新しいファイルに追加することを忘れないでください)。
- ディレクトリ固有の自動コマンド - これは非常に効果的です。
- ファイル内の特定のヘッダーをスキャンする (下記参照) - これは、過去に異なる会社や明確な名前のプロジェクトで作業していたときに最も使用した方法です。
- ファイルが開かれたときにチェックされるディレクトリごとの vimrc (下記参照)。 特にプロジェクトのコードがすべて 1 つの場所にある場合、もう 1 つのかなり簡単な実装です。
ヘッダをスキャンする
多くの組織では、すべてのソースファイルの先頭に標準的なヘッダ (著作権表示やプロジェクト名など) があります。 このような場合、Vim が自動的にファイルの最初の (たとえば) 10 行をスキャンし、キーワードを探すことができます。 もしそれが見つかったら、設定を変更することができます。 私はこれを私が使っているフォーム(他のたくさんのことをする)よりも単純になるように修正しましたが、そのために
~/.vim/after/filetype.vim
(を作成し(まだ持っていない場合)、このようなものを追加してください。
au FileType * call <SID>ConfigureFiletypes(expand("<amatch>"))
" List of file types to customise
let s:GROUPNAMETypes = ['c', 'cpp', 'vhdl', 'c.doxygen']
func! <SID>CheckForGROUPNAMECode()
" Check if any of the first ten lines contain "GROUPNAME".
" Read the first ten lines into a variable
let header = getline(1)
for i in range(2, 10)
let header = header . getline(i)
endfor
if header =~ '\<GROUPNAME\>'
" Change the status line to make it clear which
" group we're using
setlocal statusline=%<%f\ (GROUPNAME)\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" Do other customisation here
setlocal et
" etc
endif
endfunc
func! <SID>ConfigureFiletypes(filetype)
if index(s:GROUPNAMETypes, a:filetype) != -1
call <SID>CheckForGROUPNAMECode()
endif
endfunc
あらゆるタイプのファイルを開き、ファイルタイプが設定されるたびに (
au FileType *
の行) に
ConfigureFiletypes
関数が呼び出されます。 これは、ファイルタイプが現在のグループ(GROUPNAME)に関連付けられたファイルタイプのリスト(この場合は 'c'、'cpp'、'vhdl' または 'c.doxygen' )に含まれているかどうかをチェックします。 その場合、CheckForGROUPNAMECode()を呼び出し、ファイルの最初の10行を読み、それらがGROUPNAMEを含んでいれば、いくつかのカスタマイズを行います。 expandtabsなどの設定と同様に、これはステータスバーを変更してグループ名を明確に表示し、一目で動作していることが分かるようにします。
開くときに設定されているか確認する
JS Bangs の提案と同じように、カスタム設定ファイルを持つことは有用です。 しかし、vimrc で読み込むのではなく、次のようなものを考えてみてください。.c ファイルが開かれたときに、.c ファイルと同じディレクトリに .vim.custom があるかどうかをチェックします。
au BufNewFile,BufRead *.c call CheckForCustomConfiguration()
function! CheckForCustomConfiguration()
" Check for .vim.custom in the directory containing the newly opened file
let custom_config_file = expand('%:p:h') . '/.vim.custom'
if filereadable(custom_config_file)
exe 'source' custom_config_file
endif
endfunction
関連
-
[解決済み] ~/.vimrcを読み込まない
-
[解決済み] Vimで行末に移動するにはどうしたらいいですか?
-
[解決済み] Vimのコマンドラインにヤンクのテキストを貼り付ける方法
-
[解決済み] Vimで複数の異なるセッションを保存、復元する方法は?
-
[解決済み] Vimの設定ファイルにコメントを入れる方法。".vimrc" は?
-
[解決済み】vimの「sudoで書く」トリックはどうやるの?
-
[解決済み】Vimで複数のファイルを効率的に操作する方法
-
[解決済み】なぜVimはファイルを~の拡張子で保存するのですか?
-
[解決済み] nerdtreeを使ったディレクトリの作り方
-
[解決済み] vimのランタイムログ」はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] "コマンドが見つかりません: vim"
-
[解決済み] フィッシュシェルでviモードを使うには?[クローズド]
-
[解決済み] Vimで行のコメント/アンコメントを素早く行う方法は?
-
[解決済み] Vimで縦割りから横割りに高速で切り替えるには
-
[解決済み] Vimで、テキストをレジスタに入れずに削除する方法はありますか?
-
[解決済み] vimの行番号 - デフォルトでオンにする方法は?
-
[解決済み] VIM ctrlp.vim プラグイン:ファイルを再スキャンする方法は?
-
[解決済み] Vimで、regexpの "the \b "のような単語境界文字はどのように検索するのですか?
-
[解決済み] nerdtreeを使ったディレクトリの作り方
-
[解決済み] Vimでコマンドのエイリアスを作成する方法は?