2013-08-28 14 views
7

ich finde mich oft so etwas wie dies zu tun, während der Entwicklung:

:e <file> 
:vsplit <the_same_file> "reopen/re-edit with a vertical split 

Wie einige Responder haben darauf hingewiesen, es ist ein viel besserer Weg, dies zu tun: :vs<CR>. Angenommen, für einen Moment gab es keine.

Wenn ich Dateien in meinem Shell öffnen, würde ich die !$ Geschichte Expansion verwenden das letzte Argument des vorherigen Befehls zu erfassen, wie folgt aus:

$ echo "Hello" "stackoverflow" 
Hello stackoverflow 
$ echo "I'm posting on !$" 
I'm posting on stackoverflow 

Diese Expansion und die many others like it, neu definiert völlig die So habe ich die Befehlszeile benutzt. Gibt es Äquivalente in vim? Ich weiß % Aliase die aktuelle Datei. Was ist mit vergangenen Befehlsargumenten?

+0

Ich weiß nicht, von irgendwelchen direkten Äquivalenzen bash '$'!. Sie könnten aber auch 'q:' verwenden, um das Befehlszeilenfenster zu öffnen. Das Befehlszeilenfenster zeigt den Verlauf Ihrer letzten Befehle an und ermöglicht es dem Benutzer, normale vim-Befehle zu verwenden, um Änderungen am Befehl vorzunehmen. Weitere Informationen finden Sie unter ': h cmdwin'. –

+0

Ich glaube nicht, dass die vim-Befehlszeile denselben Feature-Satz von bash hat. Ihr '! $' könnte in Bash kürzer sein: ''. auch wenn Sie den Vorgang zu Beginn Ihrer Frage in vim erreichen möchten, nachdem Sie die Datei mit ': e file' geöffnet haben, können Sie' v' oder '' drücken, letzteres ist einfacher zu drücken. – Kent

+0

Sie können ': e%' und ': e #' verwenden, um die aktuelle Datei und die vorherige Datei (neu) zu bearbeiten - würde das helfen? –

Antwort

3

Soweit ich weiß Vim nicht Geschichte Expansion hat.

Die natürliche Sache zu tun ist dann, die Werkzeuge zu benutzen, die Vim uns auf der Befehlszeile gibt. Und wir haben Optionen!

  • <Up> Pfeil Filterungs
  • Befehlszeilenbearbeitungsbefehle
    • CTRL-W Wort
    • <Left> und <Right> rückwärts zu löschen, um sich zu bewegen, CTRL-B und CTRL-E zu bewegen zu Beginn/Ende der Leitung
  • Verwenden Sie die Befehlszeile e Fenster q: (oder CTRL-F, wenn bereits in der Befehlszeile) für die ultimative Geschichte Bearbeitungsleistung
  • wie %
    • automatisch erweitert Token zur Hand für das spezifische Problem idiomatische alternative Lösungen im Vim Geist finden und # sind ein gutes Beispiel

Allerdings, Wenn Sie wirklich wollen Bash-Stil Geschichte Erweiterung können Sie etwas zusammen mit Kommandozeilen-<expr> Abkürzungen ziemlich leicht (zumindest für die einfacheren Fälle).

die Geschichte Expansion Dinge, die ich am häufigsten verwenden (ehrlich gesagt nicht sehr oft):

  • !!, die letzte Zeile Befehl
  • !-2, die zweitjüngste Zeilenbefehl
  • !*, alle Argumente aber die erste der vorherigen Befehlszeile
  • !$, das letzte Argument der vorherigen Befehlszeile

Hier ist, wie man sie als Ausdruck Abkürzungen umsetzen können:

cnoreabbr <expr> !! getcmdtype() == ':' ? @: : '!*' 
cnoreabbr <expr> !-2 getcmdtype() == ':' ? histget(':', -2) : '!-2' 
cnoreabbr <expr> !* getcmdtype() == ':' ? join(split(@:,'\s\+')[1:], ' ') : '!*' 
cnoreabbr <expr> !$ getcmdtype() == ':' ? split(@:,'\s\+')[-1] : '!$' 

Und hier ist, wie Ihr Beispiel in Vim funktionieren würde:

:echo "Hello Stackoverflow" 
Hello Stackoverflow 
:echo "I'm posting on !$<Enter> 
I'm posting on Stackoverflow 

Natürlich Verwendung Funktionen für komplexere Ausdrücke, wenn Sie wirklich beschließen, diese Route zu gehen.

+0

Ich dachte, Sie könnten etwas tun dies zu listen. Ich wollte es jedoch nicht als Antwort posten, weil die Aufteilung mit Strings oder Funktionen nicht gut funktioniert. – FDinoff

+0

In Ihrem Beispiel hätte ich erwartet, dass "Hello Stackoverflow" als letztes Argument ersetzt wird. Was offensichtlich nicht passieren kann, weil Sie sich auf Whitespaces verteilen. – FDinoff

+0

Es funktioniert nur in einigen einfachen Fällen. Deshalb habe ich "Funktionen benutzen" gesagt. Aber ich glaube nicht, dass es vernünftig ist (oder sogar machbar), das '@:' zu extrahieren und zu versuchen, die Befehlszeile zu analysieren, bleibe einfach bei der normalen Befehlszeilenbearbeitung. – glts

1

Mit :vsp ohne Argumente teilt das aktuelle Fenster.

nicht genau das, was Sie für Fragen, aber ich benutze oft % die der aktuelle Dateiname:

:e some_file 
:vsp % 

Siehe :help cmdline-special

+0

Das legt mich für diesen speziellen Fall fest, aber es ist auch nur der erste Fall, an den ich denken konnte, als ich ein vorheriges Argument oder einen Befehl mit einer Erweiterung wiederholen wollte. Von Expansionen erfahren? – Christopher

0

Die herausragenden best of VIM tips wies darauf hin, einen bestimmten Bereich, in dem die Geschichte Wiederholung, nämlich in Substitutionen funktioniert:

" Summary of editing repeats [N] 
.  last edit (magic dot) 
:&  last substitute 
:%& last substitute every line 
:%&gic last substitute every line confirm 
g%  normal mode repeat last substitute 
g&  last substitute on all lines 
@@  last recording 
@:  last command-mode command 
:!! last :! command 
:~  last substitute 
:help repeating 
Verwandte Themen