vim no recuerda la última posición

89

Mi Ubuntu LTS 12.04 tiene editor vim. Si abro un archivo, me muevo a un párrafo y vuelvo a abrir vim, entonces el cursor siempre va al comienzo del archivo.

Este no es el comportamiento esperado. ¿Cómo puede recordar el vim la última posición de lectura después de cerrar un archivo?

Lo intenté vitambién, pero el resultado es el mismo.

Hongos lunares
fuente
1
Lo siento, pero parece haber 0 documentación que dice que debería. ¿Estás 100% seguro de que ese es el caso de Vim? Y, lo siento, no tengo idea de cómo configurarlo para recordar la última posición. Podría hacer un comentario innecesario por mí, pero debo saber si experimentaste el programa haciendo eso antes.
Denny
44
Por ejemplo, en Redhat, vim recuerda la última línea arbitrada de un archivo. vim parece ser un inconveniente en ubuntu 12.04
Lunar Mushrooms
También en Ubuntu 10.04 esto ciertamente no es un comportamiento predeterminado. He estado usando Vim en Ubuntu durante mucho tiempo, nunca vi tu comportamiento esperado. Probablemente lo haya configurado para hacerlo en esa instalación; consulte la respuesta de @GaryBishop, por ejemplo.
gertvdijk
Lo siento, no fue Ubuntu 10.04, fue Red Hat lo que funcionó. Actualicé mi comentario
Lunar Mushrooms

Respuestas:

116

Resuelto:

/ etc / vim / vimrc

Ya contiene la función necesaria. Solo necesito descomentarlo:

" 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

(De hecho, puede consultar /usr/share/vim/vim73/vimrc_example.vim también)

Hongos lunares
fuente
Solo parece funcionar con el usuario root, no con otros usuarios. Mi archivo vimrc es -rw-r--r-- 1 root root; ¿Ese sería el problema?
ADTC
2
Estaba teniendo el extraño problema de que un usuario recordaría la última posición, pero ningún otro. Resulta que estas líneas estaban en el archivo .vimrc del usuario, pero se comentaron en / etc / vim / vimrc. Descomentarlos allí lo habilitó para todos los usuarios.
Felwithe
66

Tuve este mismo problema y resultó que el archivo .viminfo en mi directorio de inicio tenía la propiedad incorrecta. Fue propiedad de root: root.

Una vez que arreglé la propiedad del archivo cambiándola a mí mismo, recordar la posición del archivo comenzó a funcionar para mí nuevamente

TikiTavi
fuente
3
Estas cosas funcionaron en mi caso. Estaba teniendo el mismo problema. He cambiado la propiedad de .viminfo (presente en el directorio de inicio) que soluciona los problemas de vim. Pero, ¿por qué se creó con root: root?
Brijesh Valera
1
@BrijeshValera probablemente porque comenzó vim como root cuando el archivo aún no existía.
Ruslan
1
@Ruslan Pero entonces, ¿no debería haberse creado el archivo en el directorio de inicio del usuario raíz?
ankush981
55
@dotslash es complicado con eso sudo. No cambia el entorno (al menos en su mayoría): intente ejecutar sudo bash -c 'echo $HOME', obtendrá su directorio de inicio en lugar del directorio raíz.
Ruslan
1
Esa fue la causa en mi 18.04
Hanynowsky
2

Hay un complemento llamado vim-lastplace (soy el autor) que abrirá sus archivos donde lo dejó. Mejora las sugerencias anteriores al ignorar los mensajes de confirmación porque normalmente está editando un mensaje nuevo y desea comenzar en la parte superior del archivo de mensajes de confirmación.

Greg Dietsche
fuente
¿Por qué el voto negativo? vim-lastplace hace exactamente lo que el OP solicitó, y lo hace aún mejor que la respuesta aceptada (que tiene una serie de errores).
Greg Dietsche
0

En mi caso, vi fue un enlace simbólico: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Este último no tiene características vim reales. La instalación del paquete 'vim' (usando synaptic o apt-get) hizo que este enlace simbólico apuntara /usr/bin/vim.basic, y esto solucionó el problema.

Bruno Haible
fuente
-1

Hay un error en la solución de hongos lunares. Aquí la corrección:

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
fuente
¿Por qué crees que tu solución es correcta? Se parece mucho, pero para las barras invertidas al comienzo de una línea. Si hay alguno, ¿no deberían estar al final de una línea que indica que el comando continúa en la siguiente línea ...? Además, la respuesta aceptada solo habla de descomentar una sección en un archivo de configuración global, que se instala junto con vim. Aparentemente esto resolvió el problema. ¿Dónde está el error?
Nephente
Porque si copio / pego la primera solución, me sale un error. Y publiqué el contenido de mi /usr/share/vim/vim74/vimrc_example.vim (que incluía las barras diagonales inversas al principio).
Arnaud
1
@Amaud el área de líneas ya proporcionada en el archivo, pero comentó. Solo necesita eliminar el "carácter al comienzo de las líneas para descomentarlos. No hay necesidad de "copiar / pegar la primera solución".
ADTC