2016-08-01 32 views
0

最近Vimを発見して落ちました。私は主にPythonとC++でコーディングしています。 Pythonの部分は完了しましたが(提案は歓迎です:))、私はC++に問題があります。 私はvimが適切な引数を使ってMakeコマンドを実行できることを知りました。ビルドファイルが存在しない場合、Cファイルを検出するたびにVimに現在のプロジェクトフォルダ内にビルドフォルダを作成させます。Vimのファイルタイプに基づいてフォルダを作成します

BufNewFile,BufRead *.cpp 
    \ if empty(glob('build')) | 
    \ call mkdir("build", "p") | 
    \ endif 

しかし、仕事をしたり、エラーをスローしていないよう:いくつかのグーグルの後、私はこれを試してみました。どんな助けもありがとう。私はVimへの完全なnewbyです。だから愚かな誤りを許してください。

+2

これは 'vim'ではなく' make'の仕事です。 – romainl

+0

どうすればいいですか?理想的には、私もこのようなことをやって、VIsual Studio –

+0

@romainlのようなIDEのショートカットをビルドして実行するようなショートカットを作成します。ソースディレクトリからビルドすると、makefileはまだ存在しないかもしれません。 CMakeの場合)。その場合、makeが欠落しているビルドディレクトリを作成することに依存することはできません。 –

答えて

2

あなたはこのような何かを行うことができます:

function! MkBuild(fname) abort    
    let root = finddir('.git', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';') 
    if root !=# '       
     let build = fnamemodify(root, ':p:h') . (!exists('+shellslash') || &shellslash) ? '/' : '\') . 'build'    
     if !isdirectory(build)    
      call mkdir(build)    
     endif        
    endif         
endfunction 

autocmd BufNewFile,BufRead *.cpp call MkBuild(expand('<amatch>')) 
コードのこの作品は、それがディレクトリ buildを作成見つけた後ならば、 .gitという名前のディレクトリを上向きに見ることで、プロジェクトのルートを決定しようと

プロジェクトのルート。

もちろん、.gitのテストを別のものに置き換えることができます。 F.i. CMakeLists.txtという名前のファイルを検索する:

+0

私はそれを試しましたが、fnammodify行の式が無効です。 (rootのチェックは!= ''私はそれがちょうど誤ったタイプミスであったと確信しています。だから将来誰でもそれについて投稿しないようにしてください) –

+0

さて、ディレクトリはチェックが行われているのと同じパスに構築される必要があるので、絶対パスを取得しようとすると冗長です。今それは動作します!ありがとう! –

+0

@ParthaDas _itは無効です。_ - 正確なエラーメッセージが表示されない理由を伝えにくいです。 _また、ルートのチェックは、もし!= '' _ -Nope、!=# 'が意図されていると思います。 '!=#'は大文字と小文字を区別しますが、 '!='は 'ignorecase'に依存します。最初の方がわずかに速いです。 –

関連する問題