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(),'' '')