Vraag vim herinnert zich de laatste positie niet


Mijn Ubuntu LTS 12.04 heeft een vim-editor. Als ik een bestand open, naar een alinea ga en vim opnieuw open, dan gaat de cursor altijd naar het begin van het bestand.

Dit is niet het verwachte gedrag. Hoe kan het vim de laatste leespositie onthouden na het sluiten van een bestand?

Ik heb geprobeerd vi ook, maar het resultaat is hetzelfde.


75
2017-11-28 13:07


oorsprong


Het spijt me, maar er lijkt 0 documentatie te zijn die zegt dat het zou moeten. Ben je er 100% zeker van dat dit het geval is voor Vim? En het spijt me, ik heb geen idee hoe ik het moet configureren om de laatste positie te onthouden. Misschien een onnodige opmerking van mij, maar ik moet weten of je het programma eerder hebt ervaren. - Denny
In Redhat bijvoorbeeld, wordt de laatste gerefereerde regel in een bestand onthouden door vim. vim lijkt ongemakkelijk te zijn in ubuntu 12.04 - Lunar Mushrooms
Ook in Ubuntu 10.04 is dit zeker geen standaardgedrag. Ik gebruik Vim al heel lang op Ubuntu en heb nooit je verwachte gedrag gezien. U hebt het waarschijnlijk geconfigureerd om dat te doen bij die installatie - zie het antwoord van @GaryBishop bijvoorbeeld. - gertvdijk
Sorry dat het niet Ubuntu 10.04 was, het was een rode hoed die werkte. Mijn opmerking bijgewerkt - Lunar Mushrooms


antwoorden:


Opgelost:

/ Etc / vim / vimrc

Bevat al de nodige functie. Moet gewoon uncomment het:

" 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

(Sterker nog, je kunt ook verwijzen naar /usr/share/vim/vim73/vimrc_example.vim)


95
2017-12-03 09:08



Het lijkt alleen te werken met root-gebruikers, niet met andere gebruikers. Mijn vimrc-bestand is -rw-r--r-- 1 root root; zou dat het probleem zijn? - ADTC
Ik had het vreemde probleem waarbij een gebruiker de laatste positie zou onthouden, maar geen andere. Blijkt dat deze regels zich in het .vimrc-bestand van de gebruiker bevonden, maar werden uitgelicht in / etc / vim / vimrc. Door ze daar te negeren, kon het voor alle gebruikers worden gebruikt. - felwithe


Ik had hetzelfde probleem en het bleek dat het .viminfo-bestand in mijn thuismap het verkeerde eigendom had. Het was eigendom van root: root.

Nadat ik het eigendom van het bestand had gerepareerd door het aan mezelf te veranderen, herinnerde ik me dat de positie van het bestand weer voor mij begon te werken


56
2017-11-26 15:36



Dit werkte in mijn geval. Ik had hetzelfde probleem. Ik ben van eigenaar veranderd van .viminfo (aanwezig in de homedirectory) dat vim-problemen oplost. Maar waarom is het gemaakt met root: root? - Brijesh Valera
@BrijeshValera waarschijnlijk omdat je vim als root hebt gestart toen het bestand nog niet bestond. - Ruslan
@Ruslan Maar zou het bestand dan niet moeten zijn gemaakt in de basismap van rootgebruikers? - dotslash
@ dotslash dat is lastig met sudo. Het verandert de omgeving niet (althans grotendeels): probeer het uit te voeren sudo bash -c 'echo $HOME', krijg je je homedirectory in plaats van die van root. - Ruslan
Dat was de oorzaak in mijn 18.04 - Hanynowsky


Ik denk dat deze wiki-posting een oplossing kan bieden. Ik geloof niet dat het herstellen van de positie het verwachte gedrag is. http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session


5
2017-11-28 13:36





Er is een plugin genaamd vim-lastplace (Ik ben de auteur) die uw bestanden opent waar u was gebleven. Het verbetert de bovenstaande suggesties door commit-berichten te negeren, omdat u meestal een nieuw bericht bewerkt en bovenaan het commit-berichtbestand wilt beginnen.


1
2018-01-17 03:20



waarom het downvote? vim-lastplace doet precies wat de OP vroeg, en doet het zelfs beter dan het geaccepteerde antwoord (dat een aantal fouten bevat). - Greg Dietsche


In mijn geval was vi een symlink: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. De laatste heeft geen echte voordelen. Het installeren van het pakket 'vim' (met behulp van synaptic of apt-get) zorgde voor dit symlinkpunt /usr/bin/vim.basic, en dit loste het probleem op.


0
2018-02-11 20:57





Er is een fout in de Lunar Mushrooms-oplossing. Hier de correctie:

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

-1
2017-09-29 03:01



Waarom denk je dat jouw oplossing correct is? Het lijkt veel op elkaar, maar op de backslashes in het begin van een lijn. Als ze al aanwezig zijn, moeten ze dan niet aan het einde van een regel staan ​​om aan te geven dat de opdracht op de volgende regel verdergaat ...? Het geaccepteerde antwoord heeft ook alleen betrekking op het verwijderen van commentaar in een sectie in een globaal configuratiebestand, dat samen met is geïnstalleerd vim. Blijkbaar loste dit het probleem op. Waar is de fout? - Nephente
Omdat als ik de eerste oplossing kopieer / plak, ik een foutmelding kreeg. En ik heb de inhoud van mijn /usr/share/vim/vim74/vimrc_example.vim (inclusief de backslashes aan het begin) gepost. - Arnaud
@Gebruik het regelgebied dat al in het bestand is opgegeven, maar geef een opmerking. U hoeft alleen de te verwijderen " teken aan het begin van regels om ze te laten kloppen. Het is niet nodig om de eerste oplossing te kopiëren / plakken. - ADTC