私はいくつかのグループで働いており、それぞれがCで独自のタブ/インデント/間隔の標準を持っています。
ファイルを編集するときに、それぞれに個別に選択可能なVIM構成を設定する方法はありますか?
set group=1
構成を選択するようなことをします- 作業ディレクトリにあるローカルの.vimrcを使用して、構成を自動的に設定します
私はいくつかのグループで働いており、それぞれがCで独自のタブ/インデント/間隔の標準を持っています。
ファイルを編集するときに、それぞれに個別に選択可能なVIM構成を設定する方法はありますか?
set group=1
構成を選択するようなことをします回答:
これを行うにはいくつかの方法があり、そのほとんどが提案されていますが、私はそれらを2つの追加の方法で要約すると思いました。
~/project1
、あなたが持っている~/project1/.vim.custom
と行うcd ~ ; vim project1/file.c
、カスタム設定が見つかりません。多くの組織では、すべてのソースファイルの上部に標準のヘッダー(著作権表示やプロジェクト名など)があります。この場合、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が含まれている場合は、いくつかのカスタマイズを行います。エキスパンドタブなどを設定するだけでなく、ステータスバーも変更され、グループ名が明確に表示されるため、一目で機能していることがわかります。
JS Bangsの提案と同じように、カスタム構成ファイルがあると便利です。ただし、vimrcにロードする代わりに、次のようなものを検討してください。これにより、.cファイルと同じディレクトリにある.vim.customに対して.cファイルが開かれたときにチェックされます。
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
私はこれを持っています$HOME/.vimrc
:
if filereadable(".vim.custom")
so .vim.custom
endif
これにより.vim.custom
、すべてのディレクトリにファイルを配置して、そのディレクトリに固有のコマンドとオプションをロードできます。深いディレクトリ構造を持つ複数のプロジェクトで作業している場合は、より洗練されたものが必要になる場合があります(たとえば、.vim.custom
が見つかるまでディレクトリツリーを上に移動します)が、同じ基本的な考え方で機能します。
更新:
.vim
現在のディレクトリが何であるかに関係なく、編集しているファイルと同じディレクトリからファイルを読み取るために、このようなことをします。
let b:thisdir=expand("%:p:h")
let b:vim=b:thisdir."/.vim"
if (filereadable(b:vim))
execute "source ".b:vim
endif
'exrc'
オプションでは、これと非常によく似たことがすでに許可されています。それがロードされます.vimrc
/ .exrc
/.gvimrc
現在の作業ディレクトリにあります。
exrc
は正しい答えでなければなりません。他のすべてはハッキーで複雑に見えます。
exrc
は良いことですが、編集しているファイルと同じ作業ディレクトリにいない場合でも、正しいファイルを取得できれば幸いです。
パスごとに特定のオプションを設定する自動コマンドをに入れることもでき.vimrc
ます。
au BufRead,BufNewFile /path/to/project1/* setl sw=4 et
au BufRead,BufNewFile /path/to/project2/* setl sw=3 noet
正しいことをしているプラグイン:http: //www.vim.org/scripts/script.php?script_id = 441
「このプラグインは、現在開いているファイルのファイルシステムツリーでローカルvimrcファイルを検索します。デフォルトでは、ファイルのディレクトリからルートディレクトリまでのすべての「.lvimrc」ファイルを検索し、それらを逆の順序でロードします。ロードされたファイルのファイル名と量は、グローバル変数を介してカスタマイズできます。」
仲間の開発者がそれについて文句を言わないと仮定すると、コメントの各ファイルにいつでもvim設定を追加できます。
/*
* vim:ts=4:sw=4:expandtab:...
*/
int main(int argc, char **argv)
{
...
私はこの目的のためにオープンソースのツールを作成しました。ヘッダー、スキャン、構成、ローカルvimrcファイルを忘れてください。
泳いでみてください。
swim
はvimrcファイルを切り替えて便利なエイリアスを作成するためのクイックツールです。これが短い使用法リストです。ウォークスルーGIFとダウンロード手順については、Githubリポジトリを参照してください。
swim add ~/dotfiles/myVimrc favorite #Add new swim alias
swim ls #Show available swim aliases
swim add https://raw.githubusercontent.com/dawsonbotsford/swim/master/exampleVimrcs/vimrcWikia.vim example
swim with favorite #Set alias favorite as primary .vimrc
swim with main #Set alias main as primary .vimrc
前のポスターで提案されたlocalvimrcプラグインを試した後、私はvim設定をプロジェクトごとに制御するのがとても好きです。
デフォルトでは、.lvimrcファイルをロードする前に確認を求めますが、.lvimrcファイルを自動的にロードする設定があります。これをセキュリティホールと見なす人もいるかもしれませんが、宣伝どおりに機能します。
.lvimrcファイルを.gitignoreすることを選択しました。または、共有設定(タブ/スペース拡張、タブストップ、その他のプロジェクト固有の設定)の形式でチェックインすることもできます。
.lvimrc
ファイルをに追加するのです.gitignore
か?重要なのは、vimを使用し、プラグインをインストールしているすべての人が同じ設定を取得するということです。
これがjamessanのバリエーションです
function! ConditionalLoad()
let cwd = getcwd()
if getcwd() =~ $HOME . "/src/mobile"
so $HOME/.vim.mobile
endif
endfunction
autocmd VimEnter * call ConditionalLoad()
ジャンプ先の特定のファイルなしでviを頻繁に起動するため、現在の作業ディレクトリに基づいて条件付きで構成をロードできます。欠点は、構成がファイルに基づいて適用されるのではなく、作業ディレクトリから適用されることです。
~/.vimrc
変更し、/src/mobile
私のsymfonyのディレクトリを投影し(私の場合にはそれがあったに/www/symfony
)し、修正.vim.mobile
するために.vim.symfony
、その後の内側に新しいの.vimrcの設定を置い~/.vim.symfony
ファイル
私はいくつかのグループで働いており、それぞれがCで独自のタブ/インデント/間隔の標準を持っています。
私はあらゆる種類のオープンソースを同時に使用しています。個別の.vimrc
ファイルを作成してフォーマット標準を再構成することは実用的ではありません。10年以上前、私はついにエディター構成の処理に飽きて、autotab
それを処理するために呼び出されるプログラムを作成しました。
ときautotab
Vimは示唆して設定されている、あなたがVimのにファイルをロードするたびに、autotab
それに呼び出され、Vimの設定出力はautotab
に渡される:set
コマンド。
autotab
、ファイルから数千行を読み込み、それらを分析しての設定を決定しexpandtab
、tabstop
そしてshiftwidth
パラメータ。
ファイルがインデントにハードタブを使用するのか、スペースだけを使用するのかを判断し、インデントのサイズを判断します。ファイルがタブでインデントされている場合、さまざまなタブサイズを使用してファイルサンプルをレンダリングし、内部要素の行ごとの配置などのヒューリスティックに従って判断することに基づいて、適切なタブサイズを判断します。
それは私が何年も前にアルゴリズムを微調整するのをやめたほど十分に機能します。混乱した場合は、ほとんどの場合、ファイルに複数の規則を同時に使用するなどのフォーマットの問題があることが原因です。
また、ファイルタイプに「依存しない」ため、さまざまな言語で適切に機能します。私はそれをCだけでなく、シェルスクリプト、Lisp、Makefile、HTML、そしてあなたが持っているもので使用しています。
たとえば、Cファイルの場合、ステートメントcase
内のラベルswitch
がインデントされているかどうか、ラップされた関数の引数リストが単にインデントされているか、または引数リストの開始括弧。Vimにはそのような設定があるので、プログラムを拡張してスタイルを分析し、それらのパラメーターを出力することができます。
ほぼ同じ問題を探して、Sauceプラグインも見つけました:http://www.vim.org/scripts/script.php? script_id = 3992
それは主張します:
Sauceは、複数のvimrcファイル用の軽量マネージャーであり、さまざまな環境のさまざまな設定をロードするために使用できます。要するに、あなたはたくさんの異なるvim設定ファイルを維持し、あなたがそれらを必要とするときに必要なものだけをロードすることができます。
ユーザーがファイルシステム全体にドットファイルを振りかけることを期待するのではなく、すべての構成をデータディレクトリに保持することは特に興味深いと思います。しかし、これはしばしば個人的な好みのメッターです。
私はまだそれをテストしていません。
あなたは使用することができますストウを(だけではなく、任意のドットファイルを設定を切り換えます.vimrc
)
インストールstow
:
$ apt install stow
構成ごとに複数のディレクトリを作成します。
~$ ls -d ~/dotfiles/vim*
vim-all vim-webdev vim-go
.vimrc
それらに異なるを入れてください:
$ find ~/dotfiles -name .vimrc
/home/username/vim-golang/.vimrc
/home/username/vim-webdev/.vimrc
/home/username/vim-all/.vimrc
これで、次のコマンドを使用してvim-golang構成をインスタンス化できます(dotfilesディレクトリ内で実行する必要があります)。
~$ cd ~/dotfiles
dotfiles$ stow -v vim-golang
LINK: .vimrc => dotfiles/vim-golang/.vimrc
今それはリンクされています:
$ cd ~ && ls -l .vimrc
.vimrc -> dotfiles/vim-golang/.vimrc
構成を切り替える必要がある場合は、次のようにやり直しstow
てください。
~$ cd dotfiles
dotfiles$ stow -v -D vim-golang
UNLINK: .vimrc
dotfiles$ stow -v vim-webdev
LINK: .vimrc => dotfiles/vim-webdev/.vimrc
$ cd ~ && ls -l .vimrc
.vimrc -> dotfiles/vim-webdev/.vimrc
詳細はこちら:GNUstowを使用したドットファイルの管理
長所:非常にシンプルで、vimプラグインの依存関係がなく、だけでなくすべてのドットファイルの管理に使用できます.vimrc
。
短所:構成は互いに独立しているため、それぞれを個別に管理/更新する必要があります(構成を頻繁に切り替え/更新しない場合は、問題にはなりません)。