Deaktivieren Sie vi, um beim Öffnen der Datei zur zuletzt besuchten Zeile zu gelangen

9

Gibt es etwas, das ich in meine exrcDatei einfügen kann, um zu verhindern, dass viich in die letzte Zeile gehe, in der ich mich zuletzt befand, als ich die Datei geöffnet hatte, und den Cursor standardmäßig oben platziert?

Ich denke, es ist distro-spezifisch - es verhält sich unter Solaris nicht so, aber unter RHEL.

amphibient
quelle

Antworten:

7

Diese Funktion ist als automatischer Befehl implementiert. Es ist eingerichtet in /etc/vimrc- siehe Ausschnitt unten. Entfernen Sie es von dort oder fügen Sie den Befehl hinzu, um diesen automatischen Befehl in Ihre vimrc-Datei zu entfernen. (Ich benutze Fedora - auf Rhel sollte es sehr ähnlich sein)

if has("autocmd")
  augroup fedora
  autocmd!
  "...
  " When editing a file, always jump to the last cursor position
  autocmd BufReadPost *
  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  \   exe "normal! g'\"" |
  \ endif
  "...
  augroup END
endif

Wenn Sie keine Berechtigungen haben oder nicht ändern möchten, lautet in diesem Fall /etc/vimrcder Befehl, den Sie in Ihr lokales .vimrcVerzeichnis eingeben müssen, um den automatischen Befehl zu entfernen .:au! <group> <cmdname>:au! fedora BufReadPost

Otokan
quelle
2
Ich weiß, dass dies eine alte Antwort ist, aber das funktioniert bei RHEL nicht. Ich habe au! redhat BufReadPostmeine eingegeben, ~/.vimrcaber die Cursorposition wurde immer noch auf die letzte Position gesetzt. Schließlich setze ich einfach ein, um call cursor(1,1)zu erzwingen, dass sich der Cursor am Anfang der Datei befindet.
Munir
2

Dies ist eher ein Kommentar als eine echte Antwort. Solaris ist keine Linux-Distribution. Es ist eine Version des Unix-Betriebssystems. vi auf RedHat, einer Linux-Distribution (Linux! = Unix), ist symbolisch mit vim verbunden. Solaris vi bezieht sich auf einen echten vi-Editor, der von Bill Joy erstellt wurde. Wir sprechen hier also nicht über dieselben Redakteure. Ich habe keine Ahnung, wie sich vim verhält, wenn ich nvi auf meiner OpenBSD-Box verwende, die ein weiterer Klon von echtem vi ist. Ich würde vorschlagen, dass Sie zuerst den vi-Editor auf Ihrer RedHat-Box installieren und versuchen, das Problem zu reproduzieren. Durch Eingabe vi filename.txt sollte die Datei geöffnet und die Eingabeaufforderung am Anfang der ersten Zeile stehen. Die Eingabe vi + filename.txtsollte die Datei in der letzten Zeile öffnen. Vi kann jedoch mit vielen anderen Optionen geöffnet werden, z. B. mit vi +n filename.txtdenen Sie am Anfang der n-ten Zeile stehen odervi +/regexp filename.txtDamit stehen Sie am Anfang der Zeile, die das erste Vorkommen des regulären Ausdrucks (regulärer Ausdruck) enthält. view filename.txtNur-Lese-Modus. Die vollständige Liste finden Sie auf den Manpages. Vergessen Sie nicht, den Befehl vi von vim zu trennen, wenn Sie ein echtes vi installieren.

Predrag Punosevac
quelle
1

Möglicherweise ist hierfür eine andere Option verfügbar, Sie können jedoch die folgende Problemumgehung verwenden

vim <filename> +1

+1 zeigt an, den Cursor auf Zeile 1 zu bewegen.

mtk
quelle
Ich habe, line 2: E682: Invalid search pattern or delimiterwenn ich nur vim +1in meine .exrc eingefügt habe - ich möchte keine Datei angeben müssen, dh ich möchte, dass sie auf JEDE Datei angewendet wird
amphibient
das gleiche mitvim * +1
amphibient
Es ist eine Option, die über die Befehlszeile eingegeben und nicht in eine vimrcDatei eingefügt werden kann. Wie bereits erwähnt, ist dies eine Problemumgehung.
MTK
Ich denke, es ist distro-spezifisch - es verhält sich unter Solaris nicht so, aber unter RHEL
amphibient
0

Um sicherzustellen, dass diese Funktion von einem Plugin hinzugefügt wird, versuchen Sie, die Datei mit zu öffnen

vim --noplugin <filename>

Wenn der Cursor nicht an die Position der letzten Bearbeitung springt, sollten Sie die Datei ohne den --nopluginSchalter- erneut öffnen und die Ausgabe von studieren :scriptnames. :scriptnameslistet alle zuvor bezogenen Skripte auf.

Wenn Sie ein erfahrener vim-Benutzer sind, können Sie die meisten Skripte über den Pfad ausschließen. Beispielsweise kommen alle Skripte unter &rtp/{ftplugin,spell,colors,syntax}(& rtp: = Laufzeitpfad) nicht in Frage.

Ich kann mir vorstellen, dass das Skript, das diese Funktion implementiert, einen verwandten Namen hat.

user1146332
quelle
0

Ich hatte das gegenteilige Problem und kam deshalb hierher. Ich habe mich gefragt, warum mein Cursor wieder an den Anfang der Datei zurückkehren würde. Ich bin es gewohnt, zwischen Puffern zu wechseln und jedes Mal meine Position finden zu müssen, wäre überhaupt nicht effizient!

Keine der Antworten hier spricht vom Problem, daher dachte ich, ich würde meine eigene Antwort hinzufügen, da dies Ihr Problem lösen würde. Ich muss nur einen C- oder C ++ - Kommentar in die erste Zeile nach einem Leerzeichen einfügen! Ich weiß nicht, ob dies ein Feature oder ein Fehler sein soll, aber nun ... der Cursor kommt in diesem Fall ganz oben zurück.

+---- see the space here?
|
v
 // first line of file

Das Entfernen des Kommentars oder des Leerzeichens behebt mein Problem .

Alexis Wilke
quelle