tutorial mac help comandos vim

mac - vim pdf



¿Variable que contiene la "lista de todos los búferes abiertos" en Vim? (4)

:vimgrep parece una cosa realmente útil.

He aquí cómo usarlo:

:vim[grep][!] /{pattern}/[g][j] {file} ...

:help dice que esencialmente puede agrupar {file} para nombrar, por ejemplo, *.c para el directorio actual. Es posible que haya iniciado Vim con una lista de archivos lo suficientemente complicada como para que no desee escribirla manualmente en {file} , y además Vim ya sabe cuáles son esos archivos.

Lo que me gustaría hacer es agregar algo sobre:

  • :args
  • :files
  • :buffers

¿Qué variable (s) usaría en lugar de {file} para nombrar, respectivamente, cualquiera de esas listas en un comando vimgrep ?


Aquí hay una versión ligeramente refinada de una de las respuestas. El siguiente comando busca el patrón en todas las pestañas abiertas y recuerda los resultados en la lista de arreglos rápidos:

:cex [] | tabdo vimgrepa /pattern/ %

cex [] establece el contenido de la lista de arreglos rápidos en la lista vacía. vimgrepa llamarlo primero porque vimgrepa acumula resultados de búsqueda de todas las pestañas. Además, puede reemplazar tabdo con argdo , bufdo y windo .

Para ver los resultados de búsqueda, ejecuta:

:cope

Sin embargo, este método tiene una limitación: solo puede buscar en pestañas que ya tienen nombres de archivo asignados ( % no se expandiría en una pestaña nueva).

EDITAR: También puede ~/.vimrc el comando en la función en su ~/.vimrc esta manera:

function TS(text) exe "cex [] | tabdo vimgrepa /" . a:text . "/ %" endfunction command -nargs=1 TS call TS(<q-args>) cnoreabbrev ts TS

Con la última línea puede llamar a su función de esta manera:

:ts from game import

donde palabras después de ts es un patrón de búsqueda. Sin la última línea, debe escribir el nombre de la función en mayúsculas.


Puedes hacerlo:

:bufdo vimgrep /pattern/ %

% sustituye el nombre del búfer.


Para [vim] grep la lista de archivos en la lista de argumentos, puede usar ## (ver :help cmdline-special ).

:vimgrep /re/ ##

No conozco una taquigrafía similar para la lista de búfer, pero es posible que pueda hacer algo como:

:argdelete ## :bufdo argadd %

... y luego usa ## . O use :n para abrir nuevos archivos (que se agregarán a la lista arg) en lugar de :e .


¿No puede capturar el resultado en estos comandos en un registro ( :h :redir ), e insertarlo de nuevo en :vimgrep llamada :vimgrep (con a :exe ).

Algo como:

:exe "vimgrep/pattern/ " . lh#askvim#Exe('':args'')

Notas:

  • lh # askvim # Exe es solo un contenedor :redir ; nada realmente complejo
  • algunos de estos resultados pueden necesitar algún procesamiento (ver :args que agregan corchetes)
  • A veces hay una función que devuelve exactamente lo que está buscando, vea join(argv(), '' '') en :args case
  • En cuanto a: almacenamientos intermedios, puede ser algo así como:

.

function BuffersList() let all = range(0, bufnr(''$'')) let res = [] for b in all if buflisted(b) call add(res, bufname(b)) endif endfor return res endfunction :exe ''vimgrep/pattern/ ''.join(BuffersList(),'' '')