2016-07-04 11 views
0

Eine einfache Fluss Arbeit, die ich häufig verwenden, wenn ein rspec Test läuft habe ich arbeiten gerade, in vim, ist wie folgt:Warum löscht vim die letzten zwei Zeichen, wenn "%: 8" in einem externen Befehl ausgeführt wird?

15: it "my example test" do 
16:  expect(1 == 1).to be true 
17: end 

Und diesen Test ausführen, können Sie tun:

!rspec %:15 

Dies läuft rspec als external command. % wird auf den aktuellen Dateinamen erweitert, und :15 teilt rspec mit, nur die Testlinie 15 auszuführen, anstatt alle Tests in der Datei.

Diese Technik funktioniert unter normalen Umständen gut. Wenn Sie jedoch versuchen, einen Test auf den Leitungen laufen 80-89 dann etwas Seltsames passiert:

84: it "my other test" do 
85:  expect(4 > 3).to be false 
86: end 

!rspec %:84 

Dies führt den Befehl rspec [filename]4 - das heißt, die :8 Zeichen verschwinden! (Und Sie bekommen „Datei nicht gefunden“ -Fehler.)

Eine Abhilfe Um dieses Problem zu vermeiden ist TAB nach Eingabe % zu drücken, die sofort % auf den vollständigen Pfadnamen erweitert.

Was ist jedoch der Grund für dieses seltsame Verhalten vim? Ist es ein Fehler oder eine Funktion?

Antwort

0

Eine andere, related question führte mich dazu, die Antwort darauf zu finden.

Sie können die Antwort zusammen mit weiteren Details finden, indem Sie :help filename-modifiers in vim ausführen. Hier ist eine Zusammenfassung der wichtigsten Punkt:

Der Dateiname Modifikatoren verwendet werden kann, nachdem "%", "#", "#n", "<cfile>", "<sfile>", "<afile>" oder "<abuf>".

:8 Konvertiert den Pfad in das kurze Format 8.3 (derzeit nur unter MS-Windows). Wird auf so viel von einem Pfad handeln, der ein bestehender Pfad ist.

8 ist der einzige numerische Dateiname-Modifizierer. Wenn Sie diese Funktion vollständig deaktivieren möchten, können Sie vim ohne die Funktion +modify_fname kompilieren.