VIM: escriba mi archivo en cada tecla Presione -- file campo con vim campo con file campo con vim camp Relacionados El problema

Vim: write back my file on each key press


12
vote

problema

Español

Me gustaría que Vim escriba automáticamente mi archivo tan a menudo como sea posible. El ideal sería cada pulsación de tecla.

Necesito guardar regularmente para que mi proceso de construcción de fondo lo vea. Es un makefile para un documento de látex, y me gustaría que el previsualista me muestre un documento casi actualizado cuando termine de escribir.

Respuesta eventual (las respuestas a continuación ayudan a hacer esto)

  Parser()7  
Original en ingles

I'd like vim to automatically write my file as often as possible. The ideal would be every keystroke.

I need to save regularly so that my background build process will see it. It's a makefile for a latex document, and I'd like the previewer to show me a nearly up-to-date document when I'm finished typing.

Eventual answer (the answers below helped make this)

" Choose your own statusline here let g:pbstatusline="%F %y %l:%c %m" set statusline=%F %y %l:%c %m  autocmd FileType tex setlocal autowriteall  " Save the file every 5 keypresses autocmd FileType tex setlocal statusline=%!pb:WriteFileViaStatusLine()  " Save the file every time this event fires. autocmd FileType tex :autocmd InsertLeave,CursorHold,CursorHoldI * call pb:WriteFileViaStatusLine("always")  " 1 optional param: "always" is only allowed value. let s:writefilecounter = 0 function! pb:WriteFileViaStatusLine(...)    if s:writefilecounter > 5 || (a:0 > 0 && a:1 == "always")       if &buftype == ""          write       endif       let s:writefilecounter = 0    else       let s:writefilecounter = s:writefilecounter + 1    endif     return g:pbstatusline endfunction 
</div
           
           
                       

Lista de respuestas

10
 
vote
vote
La mejor respuesta
 

un hack es usar su línea de estado:

  function! WriteFile()    if &buftype == ""     write   endif   return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2   

Mientras la línea de estado esté visible, se actualiza después de cada cambio en el archivo. Cuando se actualiza, se llama la función WriteFile() , que escribe el archivo (y devuelve mi aproximación en la línea de estado predeterminada). Con "user_id"0 , la línea de estado se muestra incluso cuando solo una ventana está abierta.

Esto mantendrá el búfer actual guardado después de cada cambio.

 

One hack is to use your status line:

function! WriteFile()    if &buftype == ""     write   endif   return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 

As long as the status line is visible, it's updated after each change to the file. When updated, the WriteFile() function is called, which writes the file (and returns my approximation at the default status line). With laststatus=2, the status line is shown even when only one window is open.

This will keep the current buffer saved after each change.

</div
 
 
           
                       
11
 
vote

Ya no se necesitan estos hacks. VIM puede escribir automáticamente un archivo en el disco siempre que se cambie. Simplemente agregue esto a su $ MyVIMRC:

"user_id"111

Creo que necesitas VIM 7.4. En contraste con "user_id"2 , esto guardará su archivo Tan pronto como lo cambie.

 

These hacks are not needed any more. Vim can automatically write a file to disk whenever it is changed. Just add this to your $MYVIMRC:

autocmd TextChanged,TextChangedI <buffer> write

I believe you need Vim 7.4. In contrast to autosave=1, this will save your file as soon as you change it.

</div
 
 
6
 
vote

Hay eventos de autocmd incorporados y cursormovedii, pero no creo que haya uno que se aplique cada vez que escriba en el modo de inserción.

También podría, fueron tan audaz, rechazar cada carácter imprimible en modo de inserción para guardar y luego escribir el carácter.

 

There are CursorMoved and CursorMovedI autocmd events, but I don't think there's one that applies every single time you type in Insert mode.

You could also, were you so bold, rebind every single printable character in Insert mode to save and then type the character.

</div
 
 
                   
                                       
4
 
vote

Si está ejecutando Linux, puede echar un vistazo a
http://www.charlietanksley.net/philtex/vim-live-latex- Vista previa /

Es el uso de scripts y MuPDF (un visor de PDF ligero) para la previsualización dinámica de látex de marcas.
Es muy rápido y la mejor solución / más fácil que he encontrado hasta ahora.
¡Lo he estado usando durante bastante tiempo ahora y funciona bien!

 

If you're running Linux, you can take a look at
http://www.charlietanksley.net/philtex/vim-live-latex-preview/

He's using scripts and MuPDF(a lightweight pdf viewer) for live preview of latex markup.
It's very fast and the best/easiest solution I have found so far.
I've been using it for quite some time now and it works great!

</div
 
 
3
 
vote

whoops! Me han informado, olvidé mencionar que este uso está en la lista TODO , y está "próximamente®". De hecho, quería esta característica hace unos días y descubrí que todavía no funciona. Drat!

Utilice la opción de AutoSave en .vimrc (_vimrc para Windows)

  "user_id"3  

Esto guardará su archivo 4 segundos después del último cambio. Configurarlo a uno lograría lo que estás buscando. Será automático y siempre funcionará. (Simpler es mejor)

TODO ... Evidentemente, no estaba reteniendo donde encontré esto cuando escribí esta respuesta hace mucho tiempo. Gracias @sehe

 

Whoops! I have been informed I forgot to mention that this usage is in the TODO list, and is "Coming Soon®". I actually wanted this feature a few days ago and discovered it doesn't work yet. Drat!

use autosave option in .vimrc (_vimrc for windows)

set autosave=4 

This will save your file 4 seconds after the last change. Setting it to one would accomplish what you're looking for. It'll be automatic and always work. (Simpler is better)

TODO ... evidently I wasn't retaining WHERE I found this when I wrote this answer long ago. Thanks @sehe

</div
 
 
   
       
1
 
vote

Sugerir que sugiero el uso del método que describí en forma similar Guardar archivo después de cada edición en VIM Pregunta:


El CursorHold y CursorHoldI podría ayudar. Según DOCS:

  |CursorHold|        the user doesn't press a key for a while |CursorHoldI|       the user doesn't press a key for a while in Insert mode   

Los eventos solo se incendian una vez después de la inactividad y dependen de updatetime variable (predeterminado: 4000 ms). Para que puedas:

  :au CursorHold <buffer> :update   

que actualizará el archivo de búfer actual (es decir, guardar solo si se modifica) después de los 4 segundos de inactividad en modo normal.

Agregar autocommand para CursorHoldI Si desea obtener el mismo comportamiento en el modo de inserción.


Configuración CursorHold , CursorHoldI Eventos junto con CursorHold8 Guardará el archivo al instante después de la edición.

 

I suggest using the method I described in similar Save file after each edit in vim question:


The CursorHold and CursorHoldI might help. According to docs:

|CursorHold|        the user doesn't press a key for a while |CursorHoldI|       the user doesn't press a key for a while in Insert mode 

Those events fire only once after inactivity and depend on updatetime variable (default: 4000ms). So you can:

:au CursorHold <buffer> :update 

Which will update current buffer file (i.e. save only if modified) after default 4 seconds of inactivity in Normal mode.

Add autocommand for CursorHoldI if you want to get the same behavior in Insert mode.


Setting CursorHold, CursorHoldI events along with very short updatetime will make vim save the file instantly after the edit.

</div
 
 
10
 
vote
vote
La mejor respuesta
 

un hack es usar su línea de estado:

  function! WriteFile()    if &buftype == ""     write   endif   return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2   

Mientras la línea de estado esté visible, se actualiza después de cada cambio en el archivo. Cuando se actualiza, se llama la función WriteFile()2 , que escribe el archivo (y devuelve mi aproximación en la línea de estado predeterminada). Con laststatus=2 , la línea de estado se muestra incluso cuando solo una ventana está abierta.

Esto mantendrá el búfer actual guardado después de cada cambio.

 

One hack is to use your status line:

function! WriteFile()    if &buftype == ""     write   endif   return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 

As long as the status line is visible, it's updated after each change to the file. When updated, the WriteFile() function is called, which writes the file (and returns my approximation at the default status line). With laststatus=2, the status line is shown even when only one window is open.

This will keep the current buffer saved after each change.

</div
 
 
           
                       
12
 
vote

Ya no se necesitan estos hacks. VIM puede escribir automáticamente un archivo en el disco siempre que se cambie. Simplemente agregue esto a su $ MyVIMRC:

autocmd TextChanged,TextChangedI <buffer> write

Creo que necesitas VIM 7.4. En contraste con autosave=1 , esto le ahorrará su archivo tan pronto como lo cambie.

 

These hacks are not needed any more. Vim can automatically write a file to disk whenever it is changed. Just add this to your $MYVIMRC:

autocmd TextChanged,TextChangedI <buffer> write

I believe you need Vim 7.4. In contrast to autosave=1, this will save your file as soon as you change it.

</div
 
 
6
 
vote

Hay eventos de autocmd incorporados y cursormovedii, pero no creo que haya uno que se aplique cada vez que escriba en el modo de inserción.

También podría, fueron tan audaz, rechazar cada carácter imprimible en modo de inserción para guardar y luego escribir el carácter.

 

There are CursorMoved and CursorMovedI autocmd events, but I don't think there's one that applies every single time you type in Insert mode.

You could also, were you so bold, rebind every single printable character in Insert mode to save and then type the character.

</div
 
 
                   
                                       
4
 
vote

Si está ejecutando Linux, puede echar un vistazo a
http://www.charlietanksley.net/philtex/vim-live-latex- Vista previa /

Está usando scripts y mupdf (un visor de PDF ligero) para la vista previa en vivo de la marca de látex.
Es muy rápido y la mejor solución / más fácil que he encontrado hasta ahora.
¡Lo he estado usando durante bastante tiempo ahora y funciona bien!

 

If you're running Linux, you can take a look at
http://www.charlietanksley.net/philtex/vim-live-latex-preview/

He's using scripts and MuPDF(a lightweight pdf viewer) for live preview of latex markup.
It's very fast and the best/easiest solution I have found so far.
I've been using it for quite some time now and it works great!

</div
 
 
3
 
vote

whoops! Me han informado, olvidé mencionar que este uso está en la lista TODO , y está "próximamente". De hecho, quería esta característica hace unos días y descubrí que todavía no funciona. Drat!

Utilice la opción de AutoSave en .vimrc (_vimrc para Windows)

  set autosave=4   

Esto guardará su archivo 4 segundos después del último cambio. Configurarlo a uno lograría lo que estás buscando. Será automático y siempre funcionará. (Simpler es mejor)

TODO ... Evidentemente, no estaba reteniendo donde encontré esto cuando escribí esta respuesta hace mucho tiempo. Gracias @sehe

 

Whoops! I have been informed I forgot to mention that this usage is in the TODO list, and is "Coming Soon®". I actually wanted this feature a few days ago and discovered it doesn't work yet. Drat!

use autosave option in .vimrc (_vimrc for windows)

set autosave=4 

This will save your file 4 seconds after the last change. Setting it to one would accomplish what you're looking for. It'll be automatic and always work. (Simpler is better)

TODO ... evidently I wasn't retaining WHERE I found this when I wrote this answer long ago. Thanks @sehe

</div
 
 
   
       
1
 
vote

Sugerir que sugiero el uso del método que describí en forma similar Guardar archivo después de cada edición en VIM Pregunta:


El CursorHold y CursorHoldI podría ayudar. Según DOCS:

  |CursorHold|        the user doesn't press a key for a while |CursorHoldI|       the user doesn't press a key for a while in Insert mode   

Esos eventos incendian solo una vez después de la inactividad y dependen de function! WriteFile() if &buftype == "" write endif return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 0 variable (Predeterminado: 4000 ms). Para que puedas:

  function! WriteFile()    if &buftype == ""     write   endif   return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 111  

que actualizará el archivo de búfer actual (es decir, guardar solo si se modifica) después de los 4 segundos de inactividad en modo normal.

Agregar autocommand para function! WriteFile() if &buftype == "" write endif return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 2 Si desea obtener el mismo comportamiento en el modo de inserción.


CONFIGURACIÓN function! WriteFile() if &buftype == "" write endif return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 3 , function! WriteFile() if &buftype == "" write endif return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)' endfunction setlocal statusline=%!WriteFile() set laststatus=2 4 EVENTOS Junto con set autosave=4 15 Guardará el archivo al instante después de la edición.

 

I suggest using the method I described in similar Save file after each edit in vim question:


The CursorHold and CursorHoldI might help. According to docs:

|CursorHold|        the user doesn't press a key for a while |CursorHoldI|       the user doesn't press a key for a while in Insert mode 

Those events fire only once after inactivity and depend on updatetime variable (default: 4000ms). So you can:

:au CursorHold <buffer> :update 

Which will update current buffer file (i.e. save only if modified) after default 4 seconds of inactivity in Normal mode.

Add autocommand for CursorHoldI if you want to get the same behavior in Insert mode.


Setting CursorHold, CursorHoldI events along with very short updatetime will make vim save the file instantly after the edit.

</div
 
 

Relacionados problema

35  ¿Cuáles son las versiones preferidas de VIM y EMACS en Mac OS X? [cerrado]  ( What are the preferred versions of vim and emacs on mac os x ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

10  ¿Cómo permitir que CSCOPE use la ruta absoluta en el archivo cscope.out?  ( How to let cscope use absolute path in cscope out file ) 
Cada vez que después de la carga A cscope.out en VIM, necesito cambiar la "PWD" de VIM al mismo directorio, ya que el archivo cscope.out está bajo, lo que pod...

245  ¿Cómo puedo cambiar la codificación de un archivo con VIM?  ( How can i change a files encoding with vim ) 
Estoy acostumbrado a usar VIM para modificar las terminaciones de línea de un archivo: $ file file file: ASCII text, with CRLF line terminators $ vim file ...

87  Cómo navegar en un gran proyecto en VIM  ( How to navigate in large project in vim ) 
¿Cómo administra grandes proyectos (cientos de archivos) utilizando solo VIM? Entro personalmente tener problemas en cualquier proyecto más grande que peque...

9  Ruby Refactoring en Vim  ( Ruby refactoring in vim ) 
Soy un gran fan de RESHARPER en Visual Studio. Tiene algunas herramientas increíbles de refactorización, similares a lo que obtienes en Eclipse para Java. ¿Ha...

5  Vimdiff contra un repo de control de origen  ( Vimdiff against a source control repo ) 
scmdiff marca las diferencias entre el Checked in la versión de un archivo y el archivo que se está editando. Lo marca al colorear las líneas cambiadas. ¿Ha...

6  Usando RVM con GVIM (crema): comando rvm no encontrado  ( Using rvm with gvim cream rvm command not found ) 
Estoy tratando de mudarme a GVIM (Crema) como mi editor principal en Ubuntu. Estoy usando los maravillosos Rails.Vim, sin embargo, también estoy usando RVM. ...

2  Usando VIM para obtener el nombre de archivo en archivos  ( Using vim to get filename into files ) 
Tengo una serie de archivos de texto (700+) y necesito obtener el nombre de cada archivo en el inicio de cada línea en el archivo. Ejemplo, para el nombre d...

4  ¿Cómo cambiar el tamaño del puntero de texto VIM en modo de inserción?  ( How to change vim text pointer size in insert mode ) 
¿Alguien tiene alguna idea de cómo cambiar el grosor del puntero de texto en GVIM en modo de inserción? Lo estoy usando en Windows, así que tal vez haya un tr...

37  ¿Cómo abrir un archivo en una lista de archivos en VIM?  ( How to open a file in a list of files in vim ) 
Tengo una larga lista de archivos abiertos en VIM que se ve así: <img src="{{ MEDIA_URL }}img/misc/upload.png" alt="Illustration" title="myimage" /> <form ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos