Normalmente abro muchos archivos en pestañas con vim -p
. ¿Es posible verificar si se modificó alguno de los archivos fuera de Vim desde que comenzó la edición?¿Cómo puedo hacer que vim revise automáticamente si el archivo ha cambiado externamente?
Respuesta
Añadir estas líneas a su .vimrc
:
au FocusGained,BufEnter * :silent! checktime
au FocusLost,WinLeave * :silent! w
Básicamente, compruebe y recarga (o descarte) los cambios externos cuando Vim o las ganancias del búfer actual foco, y, opcionalmente, de almacenamiento automático al salir de foco.
Fuente: Vim Wiki.
Uso :edit
:help :edit
para obtener más información.
vim generalmente me avisa automáticamente si detecta un cambio externo en un archivo; sin embargo, al leer detenidamente la documentación, parece que puede invocar esa verificación manualmente con :checktime
Desafortunadamente, no sé cómo deshabilitar esa comprobación automática antes mencionada para probar y ver si el tiempo de comprobación hace lo correcto, por lo que esta respuesta podría ser completamente fuera de base.
'au CursorHold * checktime' - cerca de él. Pero necesito mover el cursor para que detecte un cambio :( –
let s:pid=system("ps -p $$ -o ppid=")+0
if !exists('g:watches')
let g:watches={}
else
finish
endif
function! ModWatch(fname, match)
let fname=fnamemodify(a:fname, ':p')
if has_key(g:watches, fname)
return
endif
let shellscript=
\"while true ; do".
\" inotifywait ".shellescape(fname)." ; ".
\" kill -WINCH ".s:pid." ; ".
\"done"
echo shellscript
echo shellescape(shellscript)
let pid=system("sh -c ".shellescape(shellscript)." &>/dev/null & echo $!")+0
call extend(g:watches, { fname : pid })
augroup ModWatch
execute "autocmd! BufWipeOut ".a:match
execute "autocmd BufWipeOut ".a:match.' call DeleteWatch("'.
\escape(fname, '\"|').'")'
augroup END
endfunction
function! DeleteWatch(fname)
call system("kill ".g:watches[a:fname])
unlet g:watches[a:fname]
endfunction
augroup ModWatch
autocmd!
autocmd VimResized * checktime
autocmd BufNew * call ModWatch(expand("<afile>"), expand("<amatch>"))
augroup END
Esto solo funcionará para Linux, ¿no? –
Sí, en linux con inotify instalado. – ZyX
Puede averiguar si el búfer en la ventana activa se modifica mediante la ejecución del comando:
:set mod?
Si devuelve nomodified
, a continuación, el contenido de la memoria intermedia coinciden con los del archivo correspondiente. Si devuelve modified
, entonces el buffer tiene cambios no guardados.
De forma predeterminada, la línea de estado muestra un símbolo [+]
si el búfer actual se ha modificado. La línea de estado generalmente solo es visible si tiene ventanas divididas. Si desea mostrar la línea de estado, incluso cuando se tiene sólo una única ventana, ejecute:
:set laststatus=2
Hay un buen artículo sobre customizing your status line en VIM Recetas.
Creo que quiere decir si el archivo en el disco fue modificado por algo más que vim desde que se abrió el archivo. –
La pregunta está mal redactada: el detalle crucial que omití está entre paréntesis. Gracias por el voto a la baja. – nelstrom
En realidad tengo un [+] en la línea de tabulación si el archivo fue modificado –
me encontré con una interesante encontrar relacionado con esta pregunta hoy ...
Escondido en /usr/share/vim/vim71/vimrc_example.vim
existe este comando:
" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
\ | wincmd p | diffthis
se abrirá una ventana de vimdiff
-como con el tampón actual y el archivo subyacente que resalta todos los cambios entre los dos.
- 1. Vim: ver sólo “archivo ha sido cambiado de” alerta si el contenido es diferente
- 2. ¿Cómo detectar si una variable ha cambiado?
- 3. Javascript: compruebe si el elemento ha cambiado
- 4. Cómo saber si el registro ha cambiado en Postgres
- 5. Cómo desplazarse automáticamente ScrollViewer - sólo si el usuario no ha cambiado la posición de desplazamiento
- 6. NSDocument: El documento no se pudo guardar automáticamente. El archivo ha sido cambiado por otra aplicación
- 7. requiere un archivo de nuevo si ha cambiado
- 8. Cómo detectar si un elemento en mi ObservableCollection ha cambiado
- 9. ¿Cómo hacer que Emacs vuelva a cargar el archivo TAGS automáticamente?
- 10. InnoSetup: "El volumen de un archivo ha sido alterado externamente"
- 11. ¿Cómo puedo hacer que vim reconozca la codificación del archivo?
- 12. Cómo ver si un subarchivo de un directorio ha cambiado
- 13. ¿Cómo ha cambiado Haskell?
- 14. Wicket: notifique si el modelo de página ha sido cambiado
- 15. jQuery: ¿Cómo puedo detectar si el html ha cambiado dentro de un elemento dado?
- 16. ¿Cómo hacer que pdb reconozca que la fuente ha cambiado entre ejecuciones?
- 17. Cómo hacer android: versionName en AndroidManifest.xml cambiado automáticamente en eclipse?
- 18. ¿Cómo detecta RVM cuando ha cambiado directorios?
- 19. Cómo detectar si una propiedad del Sistema Java ha cambiado?
- 20. ¿Cómo verificar si la entidad ha cambiado en Doctrine 2?
- 21. ¿Cómo sé que ha cambiado una entrada de formulario?
- 22. ¿Cómo determina MS Visual Studio que el archivo fuente ha cambiado?
- 23. ¿Cómo saber si el sitio web que se está raspando ha cambiado?
- 24. ¿Cómo actualizar automáticamente el archivo de etiqueta en vim?
- 25. No ha cambiado nada, pero el eclipse por ejemplo marca el archivo como cambiado
- 26. El archivo de configuración ha sido cambiado por otro programa
- 27. DataGridView & BindingList: ¿Cómo verificar si el valor de la celda ha cambiado?
- 28. ¿Cómo puedo detectar si la hora del sistema ha cambiado? (de .net)
- 29. Determine si la página ha cambiado usando Webdriver
- 30. volver a aprender PHP, ¿cómo ha cambiado?
"¿Es posible verificar si alguno de los archivos se modificó desde que se inició la edición (por ejemplo, mediante algún programa externo)?" Tal como está, su pregunta es ambigua. Debería poder eliminar las declaraciones entre paréntesis sin cambiar el significado de la oración. Por favor, arregla. – nelstrom