vim não está se lembrando da última posição

89

Meu Ubuntu LTS 12.04 possui editor de vim. Se eu abrir um arquivo, mover para um parágrafo e reabrir o vim, o cursor vai sempre para o início do arquivo.

Este não é o comportamento esperado. Como o vim pode se lembrar da última posição de leitura depois de fechar um arquivo?

Eu tentei vitambém, mas o resultado é o mesmo.

Cogumelos Lunares
fonte
1
Sinto muito, mas parece haver 0 documentação que diz que deveria. Você tem 100% de certeza de que esse é o caso do Vim? E, me desculpe, eu não tenho idéia de como configurá-lo para lembrar a última posição. Pode ser um comentário desnecessário por mim, mas eu preciso saber se você experimentou o programa fazendo isso anteriormente.
Denny
4
Por exemplo, no Redhat, a última linha de referência em um arquivo é lembrada pelo vim. vim parece ser inconveniente no ubuntu 12.04
Lunar Mushrooms
Também no Ubuntu 10.04, esse certamente não é um comportamento padrão. Estou usando o Vim no Ubuntu há muito tempo, nunca vi o seu comportamento esperado. Você provavelmente o configurou para fazê-lo nessa instalação - veja a resposta de @GaryBishop, por exemplo.
gertvdijk
Desculpe, não foi o Ubuntu 10.04, foi o red hat que funcionou. Atualizado meu comentário
Lunar Mushrooms

Respostas:

116

Resolveu-o:

/ etc / vim / vimrc

Já contém o recurso necessário. Só precisa descomentar:

" 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

(Na verdade, você pode consultar /usr/share/vim/vim73/vimrc_example.vim também)

Cogumelos Lunares
fonte
Parece apenas funcionar com o usuário root, não com outros usuários. Meu arquivo vimrc é -rw-r--r-- 1 root root; esse seria o problema?
ADTC
2
Eu estava tendo um problema estranho, onde um usuário se lembraria da última posição, mas não de outros. Acontece que essas linhas estavam no arquivo .vimrc do usuário, mas foram comentadas em / etc / vim / vimrc. Descomentá-los lá habilitou-o para todos os usuários.
Feltro #
66

Eu tive esse mesmo problema e verificou-se que o arquivo .viminfo no meu diretório pessoal tinha a propriedade errada. Era de propriedade de root: root.

Depois de corrigir a propriedade do arquivo, alterando-o para mim, lembrando que a posição do arquivo começou a trabalhar para mim novamente

TikiTavi
fonte
3
Isso funcionou no meu caso. Eu estava tendo o mesmo problema. Alterei a propriedade do .viminfo (presente no diretório inicial) que corrige os problemas do vim. Mas por que foi criado com o root: root?
Brijesh Valera
1
@BrijeshValera provavelmente porque você iniciou o vim como root quando o arquivo ainda não existia.
Ruslan
1
@Ruslan Mas o arquivo não deveria ter sido criado no diretório inicial do usuário raiz?
Ankush981
5
@ Dotslash que é complicado com sudo. Não muda o ambiente (pelo menos na maioria das vezes): tente executar sudo bash -c 'echo $HOME', você obterá o diretório inicial em vez do diretório raiz.
Ruslan
1
Essa foi a causa no meu 18.04
Hanynowsky 8/08/18
2

Existe um plugin chamado vim-lastplace (eu sou o autor) que abrirá seus arquivos de onde você parou. Ele aprimora as sugestões acima ignorando as mensagens de confirmação, porque você normalmente está editando uma nova mensagem e deseja iniciar na parte superior do arquivo de mensagens de confirmação.

Greg Dietsche
fonte
por que o voto negativo? O vim-lastplace faz exatamente o que o OP pediu e o faz ainda melhor do que a resposta aceita (que possui vários bugs).
Greg Dietsche
0

No meu caso, vi era um link simbólico: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Este último não possui recursos reais do vim. A instalação do pacote 'vim' (usando synaptic ou apt-get) fez com que este link simbólico apontasse /usr/bin/vim.basic, e isso corrigiu o problema.

Bruno Haible
fonte
-1

Há um erro na solução de cogumelos lunares. Aqui a correção:

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
Arnaud
fonte
Por que você acredita que sua solução está correta? Parece muito, mas com as barras invertidas no início de uma linha. Se houver, eles não deveriam estar no final de uma linha indicando que o comando continua na próxima linha ...? Além disso, a resposta aceita apenas fala em descomentar uma seção em um arquivo de configuração global, que é instalado junto com vim. Aparentemente, isso resolveu o problema. Onde está o erro?
Nephente
Porque se eu copiar / colar a primeira solução, recebi um erro. E publiquei o conteúdo do meu /usr/share/vim/vim74/vimrc_example.vim (que incluía as barras invertidas no início).
Arnaud #
1
@Audite a área de linhas já fornecida no arquivo, mas comentou. Você só precisa excluir o "caractere no início das linhas para descomentá-lo. Não é necessário "copiar / colar a primeira solução".
ADTC