Jak w vimie otworzyć plik pod tym samym numerem linii, w którym go ostatnio zamknąłem?

141

Chcę skonfigurować Vima, aby otwierał plik w tym samym miejscu, w którym skończyłem.


źródło
: '"apostrof, po którym następują podwójne cudzysłowy, przekierowuje ostatnią linię zmian
Dhiren Hamal

Odpowiedzi:

195

Z /etc/vim/vimrcpliku Ubuntu ten przykład jest wykomentowany:

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

Jeśli to nie zadziała, typowym problemem jest brak prawa własności do ~/.viminfopliku. Jeśli tak jest, uruchom:

sudo chown user:group ~/.viminfo

gdzie użytkownik to Twój usernamei groupczęsto jest taki sam jak Twoja nazwa użytkownika.

moinudin
źródło
9
Autocmd pochodzi prosto z dokumentu vim. Zobacz: help last-position-jump
user55400
19
Jeśli pojedynczy cudzysłów w przedostatnim wierszu zostanie zmieniony na lewy przycisk, przeskoczy do rzeczywistej pozycji kursora, a nie tylko do początku tego wiersza:\| exe "normal! g`\"" | endif
u2622
4
Ta chownczęść rozwiązała problem za mnie. Czapki z głów!
slowpoison
2
Wreszcie ktoś wskazuje, że z jakiegoś powodu moje .viminfo należy do roota! Musi to znaleźć się w pozostałych 100 dokumentach, które przeczytałem.
Jack
2
Chcę tylko dać +1 chown user ~/.viminfododatkowi. Próbuję to rozgryźć już od godziny, a ty właśnie uratowałeś mi dzień.
Christopher Reid
48

Jeśli nie masz nic przeciwko handlowaniu automatyzacją dla prostoty, po prostu naciśnij klawisz '"(apostrof, a następnie podwójne cudzysłowy) przy otwieraniu pliku, a przejdziesz do miejsca, w którym byłeś. Zasadniczo to właśnie robi odpowiedź @ marcog.

sykora
źródło
24
  :h views-sessions

Możesz to umieścić w swoim .vimrc :

  au BufWinLeave * mkview
  au BufWinEnter * silent loadview

widoki zostaną umieszczone w $ HOME / .vim / view. Prawdopodobnie musisz utworzyć te katalogi.

Oli
źródło
Podoba mi się ta odpowiedź, ponieważ druga odnosiła się do pliku / etc / vim /, który nie istniał na moim Macu.
MarkHu
15

Możesz uruchomić vima bez określania nazwy pliku za pomocą

vim 

Następnie naciśnij dwukrotnie CTRL + O, aby przejść do ostatniej lokalizacji w dowolnym pliku, nad którym pracowałeś.

MatAff
źródło
Jeśli masz zainstalowany NERDTree, dwukrotne naciśnięcie Co może otworzyć NERDTree w bieżącym buforze. W moim przypadku czasami muszę wcisnąć Co do pięciu razy, ale w końcu otrzymuję efekt opisany przez @MatAff.
ashrasmun
Ctrl-cWystarczy jedno naciśnięcie . Ponadto naciśnięcie Ctrl-cwięcej przenosi mnie dalej z powrotem do pozycji kursora (nawet otwieranie odpowiednich nieotwartych plików). Używam Neovim 0.4.2, ale rozumiem, że ma to vimrównież zastosowanie.
T_T
7

Jeśli masz włączone viminfo, jest to tak proste, jak `0przejście do ostatniej edytowanej pozycji pliku. Zauważysz, że jest to po prostu polecenie „przejdź do oznaczenia”;

Rzeczywiście, możesz później zrobić '3, aby przejść do trzeciej poprzednio edytowanej lokalizacji (być może w innym pliku), a następnie powrócić do ostatniej z `0ponownie

Spójrz na

 :marks

aby zobaczyć zapamiętane lokalizacje. Zauważ również, że viminfo przechowuje wszelkiego rodzaju inne rzeczy (takie jak zawartość rejestrów, znaki na plik, historia poleceń i wyszukiwania). Większość ludzi ma to włączone z oczywistych powodów

sehe
źródło
`0 nie działa dla mnie na vimie w wersji 7.4.1689 na mac. Ale „0 załatwia sprawę”. Czy to pomyłka w odpowiedzi?
alamoot
@alamoot no nie, patrz vimdoc motion.txt - Sprawdź, co znak twój `klucz faktycznie generuje, czy:verbose map `
sehe
masz rację. Według vimdoc oba mają rację!
alamoot
6

Istnieje wtyczka o nazwie vim-lastplace (jestem autorem), która otworzy twoje pliki tam, gdzie przerwałeś. Poprawia powyższe sugestie poprzez ignorowanie komunikatów o zatwierdzeniach, ponieważ zazwyczaj edytujesz nową wiadomość i chcesz rozpocząć od góry pliku wiadomości o zmianach.

Greg Dietsche
źródło
wszystko, co możesz zrobić bez wtyczek, jest najlepsze. celuj w .vimrc: im mniejszy kod, tym lżejszy i szybszy
nilon
1

Czasami ~/.viminfostaje się tylko do odczytu lub użytkownik nie ma dostępu do pliku. Może to być również powód, dla którego vim nie przechowuje pozycji kursora po zamknięciu pliku.

dam0055
źródło