vim erinnert sich nicht an die letzte Position


89

Mein Ubuntu LTS 12.04 hat einen VIM-Editor. Wenn ich eine Datei öffne, zu einem Absatz gehe und vim erneut öffne, springt der Cursor immer zum Dateianfang.

Dies ist nicht das erwartete Verhalten. Wie kann sich das vim nach dem Schließen einer Datei die zuletzt gelesene Position merken?

Ich habe es viauch versucht , aber das Ergebnis ist das gleiche.


1
Es tut mir leid, aber es scheint keine Dokumentation zu geben, die dies vorschreibt. Sind Sie zu 100% sicher, dass dies bei Vim der Fall ist? Und es tut mir leid, ich habe keine Ahnung, wie ich es so konfigurieren soll, dass es sich an die letzte Position erinnert. Könnte ein unnötiger Kommentar von mir sein, aber ich muss wissen, ob Sie das Programm früher erlebt haben.
Denny

4
In Redhat wird beispielsweise die letzte referierte Zeile in einer Datei von vim gespeichert. vim scheint in Ubuntu 12.04
Lunar Mushrooms

Auch in Ubuntu 10.04 ist dies sicherlich kein Standardverhalten. Ich habe Vim für eine lange Zeit auf Ubuntu verwendet und nie Ihr erwartetes Verhalten gesehen. Sie haben es wahrscheinlich für diese Installation konfiguriert - siehe die Antwort von @GaryBishop zum Beispiel.
Gertvdijk

Entschuldigung, es war nicht Ubuntu 10.04, es war Red Hat, das funktionierte. Mein Kommentar wurde aktualisiert
Lunar Mushrooms

Antworten:


116

Gelöst es:

/ etc / vim / vimrc

Enthält bereits notwendiges Feature. Ich muss es nur auskommentieren:

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

(Genau, Sie können auch auf /usr/share/vim/vim73/vimrc_example.vim verweisen.)


Es scheint nur mit Root-Benutzern zu funktionieren, nicht mit anderen Benutzern. Meine vimrc-Datei ist -rw-r--r-- 1 root root; Wäre das das Problem?
ADTC

2
Ich hatte das seltsame Problem, dass sich ein Benutzer an die letzte Position erinnerte, aber keine anderen. Es stellte sich heraus, dass sich diese Zeilen in der .vimrc-Datei des Benutzers befanden, jedoch in / etc / vim / vimrc auskommentiert waren. Wenn Sie sie dort nicht kommentieren, wird sie für alle Benutzer aktiviert.
Freitag,

66

Ich hatte das gleiche Problem und es stellte sich heraus, dass die .viminfo-Datei in meinem Home-Verzeichnis den falschen Besitz hatte. Es war im Besitz von root: root.

Nachdem ich den Dateieigentum durch Ändern in mich selbst behoben hatte, funktionierte das Speichern der Dateiposition wieder für mich


3
Das hat in meinem Fall funktioniert. Ich hatte das gleiche Problem. Ich habe den Besitz von .viminfo (im Ausgangsverzeichnis vorhanden) geändert, mit dem vim-Probleme behoben werden. Aber warum wurde es mit root erstellt: root?
Brijesh Valera

1
@BrijeshValera wahrscheinlich, weil Sie vim als root gestartet haben, als die Datei noch nicht existiert hat.
Ruslan

1
@ Ruslan Aber sollte die Datei dann nicht im Home-Verzeichnis des Root-Benutzers erstellt worden sein?
Ankush981

5
@ Dotslash, das ist schwierig mit sudo. Die Umgebung ändert sich nicht (zumindest größtenteils): Versuchen sudo bash -c 'echo $HOME'Sie es mit dem Laufen , Sie erhalten Ihr Home-Verzeichnis anstelle des Root-Verzeichnisses.
Ruslan

1
Das war die Ursache in meinem 18.04
Hanynowsky


2

Es gibt ein Plugin namens vim-lastplace (ich bin der Autor), das Ihre Dateien dort öffnet, wo Sie aufgehört haben. Es verbessert die obigen Vorschläge, indem es Commit-Nachrichten ignoriert, da Sie normalerweise eine neue Nachricht bearbeiten und am Anfang der Commit-Nachrichtendatei beginnen möchten.


Warum die Gegenstimme? vim-lastplace macht genau das, wonach das OP gefragt hat, und macht es sogar besser als die akzeptierte Antwort (die eine Reihe von Fehlern enthält).
Greg Dietsche

0

In meinem Fall vi war ein symbolischer Link: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Letzteres hat keine wirklichen vim Funktionen. Durch die Installation des Pakets 'vim' (mit synaptic oder apt-get) wurde dieser Symlink auf gesetzt /usr/bin/vim.basicund das Problem behoben.


-1

In der Lösung von Lunar Mushrooms ist ein Fehler aufgetreten. Hier die Korrektur:

if has("autocmd")
  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

endif

Warum glauben Sie, dass Ihre Lösung korrekt ist? Es sieht sehr ähnlich aus, aber für die Backslashes am Anfang einer Zeile. Sollten sie nicht am Ende einer Zeile stehen, um anzuzeigen, dass der Befehl in der nächsten Zeile fortgesetzt wird? In der akzeptierten Antwort geht es nur darum, einen Abschnitt in einer globalen Konfigurationsdatei zu dekommentieren, die zusammen mit installiert wird vim. Anscheinend hat dies das Problem gelöst. Wo ist der Fehler?
Nephente,

Denn wenn ich die erste Lösung kopiere / einfüge, erhalte ich eine Fehlermeldung. Und ich habe den Inhalt meiner Datei /usr/share/vim/vim74/vimrc_example.vim gepostet (die am Anfang die Backslashes enthielt).
Arnaud

1
@Amaud der Zeilenbereich, der bereits in der Datei angegeben, aber kommentiert ist. Sie müssen nur das "Zeichen am Zeilenanfang löschen, um die Kommentare zu entfernen. Es ist nicht erforderlich, die erste Lösung zu kopieren oder einzufügen.
ADTC
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.