2016-08-01 10 views
0

Ich habe vor kurzem Vim entdeckt und bin darauf hereingefallen. Ich schreibe hauptsächlich in Python und C++. Der Python-Teil ist fertig (obwohl Vorschläge willkommen wären :)), aber ich habe Probleme mit C++. Ich sah, dass vim Make-Befehle ausführen kann, mit entsprechenden Argumenten auch. Also möchte ich, dass Vim einen Build-Ordner im aktuellen Projektordner erstellt, wenn er eine C-Datei findet, wenn die Build-Datei nicht existiert. Nach einigem googeln habe ich folgendes versucht:Erstellen von Ordnern basierend auf Dateitypen in Vim

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

Aber es scheint nicht zu funktionieren oder irgendwelche Fehler zu werfen. Jede Hilfe wäre willkommen. Ich bin Vim völlig neu, also entschuldige alle dummen Fehler.

+2

Dies ist ein Job für 'make', nicht für' vim'. – romainl

+0

Könnten Sie bitte die Einzelheiten angeben, wie es geht? Idealerweise würde ich auch so etwas machen, eine Verknüpfung erstellen, die dem Erstellen und Ausführen einer Verknüpfung von IDEs wie VIsual Studio –

+0

@Romain ähnlich wäre. Wenn wir das Quellverzeichnis erstellen, ist das Makefile möglicherweise noch nicht vorhanden (wie es das ist Fall mit CMake). In diesem Fall können wir uns nicht auf make verlassen, um das fehlende Build-Verzeichnis zu erstellen. –

Antwort

2

Sie so etwas tun könnte:

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>')) 

Dieses Stück Code versucht, indem Sie nach oben für ein Verzeichnis der Wurzel Ihres Projekts zu bestimmen .git benannt, dann, wenn er feststellt, es ein Verzeichnis build in das schafft Wurzel des Projekts.

Natürlich können Sie den Test für .git durch etwas anderes ersetzen. F.i. nach einer Datei mit dem Namen CMakeLists.txt suchen:

let root = findfile('CMakeLists.txt', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';') 
+0

Ich habe es ausprobiert, aber es sagt ungültigen Ausdruck für die fnamemodify Zeile. (Auch ich denke, der Check für root wäre wenn! = '' Ich bin sicher, es war nur ein unbeabsichtigter Tippfehler. Nur damit niemand in der Zukunft darüber posten wird.) –

+0

Okay, ich habe das ausgeschaltet Denken Sie daran, da das Verzeichnis im selben Pfad erstellt werden muss, in dem die Überprüfung durchgeführt wird, ist der Versuch, den absoluten Pfad zu erhalten, redundant. Jetzt funktioniert es! Vielen Dank! –

+0

@ParthaDas _it sagt ungültigen Ausdruck_ - Schwer zu sagen, warum ohne die genaue Fehlermeldung. _Ich denke auch, dass die Prüfung für root wäre, wenn! = '' _ - Nein, '! = #' Ist gemeint. '! = #' ist Groß- und Kleinschreibung, während '! =' von 'ignorecase' abhängt. Der erste ist geringfügig schneller. –

Verwandte Themen