VIM: wie man unter Ubuntu zur exakten Linie geht


86

Ich benutze vi unter Ubuntu 12.10. Einige Dateien sind ziemlich lang. Wenn ich also in die Mitte der Datei gehen möchte, muss ich nach unten blättern oder nach unten scrollen.

Gibt es eine VIM-Verknüpfung, um zu einer genauen Zeilennummer zu gelangen?


@ Vim Experten. Ist das wirklich Ubuntu- / Bash- / Linux-spezifisch (gemäß OP-Tags)? Ich benutze vim nicht viel, aber für meine Zwecke habe ich nicht den geringsten Unterschied zwischen Ubuntu / CentOS / Suse / Windows bemerkt.
Alexander Malakhov

Antworten:


142
:150

bringt Sie zur Linie 150 in vi

:1500

bringt Sie zur Linie 1500 in vi

Gemäß den Kommentaren möchten Sie vielleicht versuchen

150G

um zu Zeile 150 zu gelangen. Dies sind weniger Tastenanschläge als :150Enter wenn Sie nicht sicher sind, in welcher Zeile Sie sich befinden

 :set nu!

Beachten Sie die:

Wenn Sie immer die Linie sehen möchten, sollten Sie Ihr vim-Profil bearbeiten. Meistens

vi ~/.vimrc

und hinzufügen

:set nu! 

und schreiben und beenden

:wq
#or you could use :x

Dies kann außerhalb von vi erfolgen. Wenn ich beispielsweise Zeile 5000 in einer Textdatei löschen möchte, kann ich eine Skriptsprache verwenden. Zum Beispiel wäre es mit sed das Folgende

sed -i '5000d;' inputFile.txt

Zeile 10 bis 20 zu löschen wäre es

sed -i '10,20d;' inputFile.txt

Beachten Sie, dass -i die Datei an Ort und Stelle bearbeitet. Ohne das -i wird es stdout. Versuch es. Sie können stdout in eine Datei umleiten

sed '5001,$d;' inputFile.txt >> appenedFile.txt

Hier könnte für Sie viel los sein. Dadurch wird die Zeile 5001 in $ gelöscht. Mit $ als Ende der Datei. >> wird an eine Datei angehängt. Dabei erstellt as> eine neue Datei.

Wenn Sie neugierig sind, wie viele Zeilen eine Datei enthält, möchten Sie möglicherweise eingeben wc -l inputFile.txt

Einiges davon mag furchtbar trivial erscheinen, aber wenn Sie versuchen, eine Datei mit 50.000 Zeilen zu bearbeiten, kann es eine süße Minute dauern, bis sie geöffnet und durchlaufen wird. Wenn Sie wissen, dass Sie nur die letzte Zeile löschen möchten, können Sie sed verwenden und dies in einem Bruchteil der Zeit tun.

sed kann auch innerhalb einer Datei suchen und ersetzen. Aber vielleicht ist auch awk, perl oder python eine praktikable Lösung.

Aber insgesamt möchten Sie vielleicht ein gutes Tutorial zu vi finden. Tausende existieren. Ich würde Google konsultieren. Vielleicht finden Sie sich einen VIM Cheatsheat.


Kein Problem, ich habe meine Antwort aber ein wenig erweitert. Viel Glück
Matchew

2
Außerdem können Sie in vim Folgendes eingeben: n50% und zur Mitte der Datei gelangen.
Eric Fortis

1
Im normalen Modus 150Gwird das Gleiche getan wie :150. Es ist nicht schneller, aber möglicherweise leichter zu merken.
Romainl

@romainl 150gg macht das gleiche. Beide sind in der Tat schneller als: 150 <cr>
Randy Morris

@ Randy Morris - Ja, es ist schneller, ich habe vergessen zu <CR>berücksichtigen.
Romainl

13

Weitere vim-Tipps: im Befehlsmodus

  • H geht zum oberen Bildschirmrand
  • M geht in die Mitte des Bildschirms
  • L geht zum unteren Rand des Bildschirms
  • gg geht in die erste Zeile
  • G geht zur letzten Zeile


6

Bearbeiten Sie Ihre Datei in einem geöffneten Terminal in einer Bash-Shell einfach, indem Sie Folgendes ausführen:

$ vi +N yourfile

Wo Nist die Zeilennummer?

Zum Anzeigen ( moreoder less;):

$ less +N yourfile
$ more +N yourfile

Der Befehl+ mean mean , der beim Start ausgeführt werden soll . Also , wenn Befehl ist nur eine Zahl, dann vi, lessund more, wird springt dies als Zeilennummer .

Sie können jedoch auch verwenden, /regexum das erste Auftreten einer bestimmten Zeichenfolge oder eines regulären Ausdrucks zu ermitteln:

$ less +/Error logfile
$ less -i +/error logfile      # -i Causes less's searches to ignore case
$ vi +/open.*myfile myprog...

3

Ein weiterer Rat: Da Sie neu in Vim sind, vimtutorkann das Laufen sehr hilfreich sein.


5
Sollte dies nicht nur ein Kommentar sein, da er die spezifische Frage nicht anspricht?
Brian Rasmussen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.