2017-03-28 7 views
0

Wie kann ich ein aktuelles Arbeitsverzeichnis für einen bestimmten Puffer ändern und für andere Puffer auf einen vorherigen Wert ändern?VIM: Ändern des Arbeitsverzeichnisses nur für den aktuellen Puffer

Genauer gesagt, was ich tun möchte, ist automatische Befehle für bestimmte Dateitypen, die ein aktuelles Arbeitsverzeichnis ändern, wenn ein Puffer mit dem Dateityp aktiv ist. Und ändern Sie es zurück, wenn Sie mit anderen Puffern arbeiten.

hatte ich so etwas in meinem vimrc:

autocmd BufEnter *.py :lcd%:p:h 
autocmd BufLeave *.py :lcd- 

Die Idee dabei ist, dass ich zu Datei-Verzeichnis wechseln wollte, als auf Python-Dateien arbeiten und zu einem früheren Verzeichnis wechseln, wenn sie auf etwas anderem arbeiten, z.B. Text, vimL usw. Offensichtlich hat es nicht funktioniert. Ich versuche auch mit BufWinLeave, aber es hat nichts geändert.

Können Sie darauf hinweisen, was hier nicht stimmt? Oder vielleicht gibt es eine einfachere Lösung dafür?

+0

Wenn ': lcd' betrifft nur die * .py Dateien warum dann würden Sie auch versuchen, die CWD für andere Puffer zurückkehren ?! Worauf reagieren Sie, wenn sich der CWD dieses Puffers nie geändert hat? –

+0

Beachten Sie, dass ': lcd' fensterorientiert und nicht bufferlokal ist. – romainl

+0

@ work.bin als romainl erwähnt window-local, nicht buffer- oder file-local. Im selben Fenster kann ich mehrere Puffer verschiedener Dateitypen haben. Und ich möchte, dass cwd für alle Puffer gleich ist, außer für .py-Dateien. Dort möchte ich CWD in das Verzeichnis mit einer .py-Datei ändern. – mfedoten

Antwort

0

Ich glaube, Sie etwas ähnliches mit folgenden erreichen können:

augroup CDRooter 
    autocmd! 
    autocmd BufWinEnter * if &filetype == 'python' | lcd %:p:h | else | lcd! | endif 
augroup END 

Hinweis: Ich bin nicht sicher :lcd - gut funktionieren wird. Stattdessen verwende ich :lcd!, um das Fenster einfach auf das globale aktuelle Arbeitsverzeichnis zurückzusetzen.

Die Grundidee ist, wann immer Sie ein Fenster betreten, schnüffeln Sie den Dateityp und führen Sie :lcd entsprechend aus.

Weitere Hilfe finden Sie unter:

:h 'filetype' 
:h BufWinEnter 
:h :lcd 
:h :augroup 
:h :autocmd 
:h :if 
+0

Das funktioniert nicht wirklich. Es funktioniert wie erwartet, aber es ist nicht das, was ich wollte. Ich möchte nicht in das Home-Verzeichnis wechseln, sondern in das Verzeichnis, in dem eine Datei (außer .py) geöffnet wurde. ': lcd -' funktioniert gut, wenn ich es manuell versuche. Aber in Auto-Befehl von meiner Frage es nicht scheint, es scheint, als ob cwd mehrmals auf das gleiche Verzeichnis geändert wird, weil "lcd-" das gleiche Verzeichnis (einschließlich der Python-Datei) zurückgibt. – mfedoten

+0

@mfedoten Ich habe geändert, um ': lcd!' Zu verwenden, um das globale aktuelle Arbeitsverzeichnis für Nicht-Python-Fenster zu verwenden. Dies ist möglicherweise nicht das, was Sie wollen. Vielleicht möchten Sie ': lcd' für einige spezielle Nicht-Python-Puffer verwenden. Wenn dies der Fall ist, würden Sie wahrscheinlich einen Mechanismus benötigen, um das korrekte Verzeichnis in einer Puffervariablen zu speichern und es zu ': lcd' in das richtige Verzeichnis zu verwenden. Oder verlassen Sie sich auf einen Befehl, um '' lcd' 'an die richtige Stelle zu bringen (z. B. '' Glcd'' –

Verwandte Themen