vim swapfile

Cambiar el nombre de archivo de Vim swap/backup/undo



swapfile (3)

¿Es posible cambiar la forma en que Vim nombra sus archivos swap / backup / undo?

Para evitar el desorden, he establecido opciones en mi ~/.vimrc para volcar estos archivos en ~/.vim/tmp/{swap,backup,undo} ; sin embargo, como habitualmente edito archivos en diferentes directorios con el mismo nombre, a menudo termino con muchos archivos por lo demás indistinguibles y Vim a veces tiene problemas para recuperarse.

Idealmente, me gustaría usar el esquema de nombres que el deshacer persistente tiene ( %path%to%file.undo ) para todos estos archivos auxiliares; no hay una manera obvia de configurarlo, pero ¿se puede hacer con las Buf{Read,Write} ?


Aquí hay parte de mi .vimrc de github .

Esto configura el undodir (y lo activa), establece el directory backupdir y el directory (utilizado para archivos .swp ). Tenga en cuenta que crea los directorios si aún no existen.

" Save your backup files to a less annoying place than the current directory. " If you have .vim-backup in the current directory, it''ll use that. " Otherwise it saves it to ~/.vim/backup or . if isdirectory($HOME . ''/.vim/backup'') == 0 :silent !mkdir -p ~/.vim/backup >/dev/null 2>&1 endif set backupdir-=. set backupdir+=. set backupdir-=~/ set backupdir^=~/.vim/backup/ set backupdir^=./.vim-backup/ set backup " Save your swap files to a less annoying place than the current directory. " If you have .vim-swap in the current directory, it''ll use that. " Otherwise it saves it to ~/.vim/swap, ~/tmp or . if isdirectory($HOME . ''/.vim/swap'') == 0 :silent !mkdir -p ~/.vim/swap >/dev/null 2>&1 endif set directory=./.vim-swap// set directory+=~/.vim/swap// set directory+=~/tmp// set directory+=. " viminfo stores the the state of your previous editing session set viminfo+=n~/.vim/viminfo if exists("+undofile") " undofile - This allows you to use undos after exiting and restarting " This, like swap and backup files, uses .vim-undo first, then ~/.vim/undo " :help undo-persistence " This is only present in 7.3+ if isdirectory($HOME . ''/.vim/undo'') == 0 :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1 endif set undodir=./.vim-undo// set undodir+=~/.vim/undo// set undofile endif

Afortunadamente, se comentó lo suficiente como para entender lo que está sucediendo. Si no, agrega un comentario y lo arreglaré.

Ciao!

Actualización [16/07/2012]

Recibí un correo electrónico de Rob Kine que me hacía estas preguntas sobre la sección backupdir que quería responder para todos:

  1. Parece que está eliminando el directorio actual y luego volviéndolo a agregar. que hace eso?
  2. ¿Qué hace el operador ^= ?
  3. ¿Cómo funciona el orden de precedencia en el uso de las carpetas trabajadas en Vim? (¿Como es la última carpeta agregada la primera que busca?)

Lo primero es describir los diferentes operadores. Estos operadores tienen diferentes significados para las opciones de lista de cadenas, ¡así que ten cuidado!

  • -= elimina el valor de una lista de cadenas;
  • += agrega el valor a una lista de cadenas;
  • ^= antepone el valor a una lista de cadenas.

Entonces, el backupdir tiene las siguientes operaciones aplicadas:

  1. Elimina el directorio actual de la lista.
  2. Agregue el directorio actual a la lista (esto asegura que sea la última cosa marcada).
  3. Elimine el directorio personal de la lista (no me gusta que se guarden cosas allí).
  4. Anteponer ~/.vim/backup/ .
  5. Anteponer ~/.vim-backup/ .

Cuando Vim busca dónde guardar las copias de seguridad, comprueba de principio a fin; entonces comprobará ~/.vim-backup/ , luego verifica ~/.vim/backup , luego verifica la lista por defecto (excepto . y ~/ que fueron eliminados), y finalmente verifica .

Puede obtener ayuda para todos estos en Vim usando (por ejemplo) :help ^= or :help backupdir .


Crear el directorio deshacer

$ mkdir ~/.vimundo

Configure su archivo .vimrc

set undodir=~/.vimundo


Tengo esto en mi .vimrc y nombra los archivos de intercambio con nombres de ruta completos y signos de porcentaje, tal como lo describe:

" Store swap files in fixed location, not current directory. set dir=~/.vimswap//,/var/tmp//,/tmp//,.

La clave es // al final de los directorios. Ver esta nota de :help dir :

  • Para Unix y Win32, si un directorio finaliza en dos separadores de ruta "//" o "//" , el nombre del archivo de intercambio se generará desde la ruta completa al archivo con todos los separadores de ruta sustituidos por signos de porcentaje ''%''. Esto asegurará la exclusividad del nombre del archivo en el directorio de conservación.