vi Kommandozeile, goto Zeile und Spalte

17

Ich habe die Verwendung von emacsund vi( vim) für eine lange Zeit gemischt . Jeder von ihnen hat seinen Vorteil. Ich analysiere die Fehlerausgabe eines compilationsähnlichen Prozesses und erhalte eine Zeilen- und Spaltennummer, kann aber nur emacsdirekt zu einer Zeile und einer Spalte wechseln:

emacs +15:25 myfile.xml

mit habe viich nur die zeilennummer (laut manpage)

vi +15 myfile.xml

Es gibt eine Option, den Cursor auf ein Muster ( vi +/pattern myfile.xml) zu setzen, das ich nie zur Arbeit gebracht habe. Aber das würde mir nicht helfen, da das Muster nicht immer das erste Vorkommen in der Datei ist.

Wie kann ich anfangen, vidamit es in Spalte 25 in Zeile 15 meiner Datei angezeigt wird? Kann ich etwas mit -cOption machen?

Dominique
quelle
3
Da Sie vim markiert haben Sie das als quickfixSystem, das von den Compiler läuft innerhalb vim, analysiert die Fehlerausgabe, füllt eine Liste von Fehlern (navigate mit :cp, :cn, :clBefehle) und positioniert den Cursor an die erste?
Random832
Wenn du eine Datei in vi öffnest und eingibst, :15springt sie in die Zeile 15. Ich hoffe, das hilft dir
Code Ninja

Antworten:

17

Sie können verwenden:

vi '+normal 15G25|'  myfile.xml
Christa
quelle
2
erklärung: den meisten befehlen (dh den meisten buchstaben) in vi kann eine nummer (oder ein bereich) vorangestellt werden, um das standardverhalten zu ändern oder es zu wiederholen (oder auf einen bestimmten bereich anzuwenden). In vi können Sie im Befehlsmodus 15Gzu Zeile 15 und 25|zu Spalte 25 gehen. Und Christa zeigt, wie Sie dasselbe von der Befehlszeile aus tun.
Olivier Dulac
7

Mit dem Dateizeilen-Plugin können Sie einfach Zeile und Spalte an den Dateinamen anhängen, sowohl beim Aufrufen von Vim als auch mit Befehlen wie :edit:

vim myfile.xml:15:25
Ingo Karkat
quelle
Gut zu wissen, dass es das gibt, aber ich denke, ich werde eine Antwort verwenden, die kein zusätzliches Plugin erfordert
Dominique
@ Dominique Sie können auch vim myfile.xml +15für Zeile ohne Plugin, aber nicht Spalte, soweit ich weiß
Izkata
5

Nur zum Spaß gibt es -c 'normal 14j24l'welche, die Sie auf Zeile 15, Zeichen 25 setzen

hildred
quelle
4

Ich weiß nichts über die -cOption, aber Sie sollten in der Lage sein, Folgendes zu tun:

vi '+cal cursor(15,25)' myfile.xml

(Stellen Sie sicher, dass Sie wegen der Klammer zitieren ())

Anthon
quelle
cursor()Verwendet den Byte-Index für die Spalte, in der Regel handelt es sich jedoch um eine Zeichenanzahl.
Ingo Karkat
@IngoKarkat Ist das wirklich wichtig? Der Text ist UTF-8.
Dominique
2
Dies ist wichtig für Nicht-ASCII-Zeichen, die durch mehr als ein Byte dargestellt werden. Außerdem belegen ein Tabulator und Steuerzeichen normalerweise mehr als eine Anzeigespalte.
Ingo Karkat
2

Nichts wert:

-c command 

Führen Sie den angegebenen ex-Befehl beim Start aus. Für vi ist nur eine Option -c zulässig . Vim akzeptiert bis zu 10. Eine ältere Form dieser Option +commandwird weiterhin unterstützt.

Der +commandhat die gleiche einzige ex commandEinschränkung bei der Verwendung vi.

Das +/patternist auch auf einen Befehl mit beschränkt vi.

(entnommen aus vim und ex editor )

Bee Kay
quelle
1

Sie können den folgenden Code zu Ihrem vimrc hinzufügen. Wenn Sie zu Ihrer Datei zurückkehren, kehren Sie automatisch zur alten Position zurück:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Persischer Golf
quelle