2010-03-15 12 views

Respuesta

9

Tengo las siguientes asignaciones (inspiradas en Vimperator) que facilitan el cambio de buffer anterior/siguiente.

nmap <C-P> :bp<CR> 
nmap <C-N> :bn<CR> 

Esto funciona muy bien con 'n'.Cuando haya terminado de trabajar con su archivo, simplemente pulse CTRL-n antes de golpear n de nuevo y que está buscando en la siguiente memoria intermedia. Rehaga hasta que haya terminado con todos los buffers.


Otra forma de trabajar con muchos archivos es la lista de argumentos.

Contiene los archivos pasados ​​como parámetros cuando comenzó vim (por ejemplo: vim someFile.txt someOtherFile.py). El archivo dentro de [corchetes] es el archivo actual.

:args 
[someFile.txt] someOtherFile.py 

: n lo llevará al siguiente archivo de la lista y: N lo traerá de regreso. También se pueden añadir a la argslist con: argadd, o crear una nueva lista de argumentos con

:n some.py files.py you.py want.py to.py work.py with.py 
or to open all *.py files recursively from some project. 
:n ~/MyProjects/TimeMachine/**/*.py 

funciona la lista de argumentos bien con macros también (ver: ayuda q), si tiene cambios similares en sus archivos. Simplemente grabe su macro en el primer archivo, termine con: n para pasar al siguiente archivo, y detenga la grabación.

qq/searchForSomethingAndDoStuffOrWhatever:nq 

A continuación, ejecute la macro a través de todos los archivos (6 @ q), echar un vistazo para comprobar que todo ha ido bien, y terminar con un: pared.


Depende de lo que quieras hacer. Si sólo hay un cambio que es exactamente la misma a través de muchos archivos (y esos son los únicos que haya cargado), también me gusta el comando:: b bis (tabdo sp). Es muy rápido y puedes ver lo que está sucediendo.

Y si tiene varios búferes abiertos, puede cargar los archivos en los que desea trabajar, cada uno en una ventana, y hacer una expresión regular en todos ellos.

CTRL-w v :b someFile 
:sp anotherFile 
... 
:windo :%s/foo/bar/g 

Realmente recomiendo FuzzyFinder, hace su vida mucho más fácil al abrir archivos.

http://www.vim.org/scripts/script.php?script_id=1984

MMMMmmmm VIM ES AGRADABLE! ¡TAN SEXY! :)

38

Utilice el comando bufdo.

:bufdo command 

:bufdo command es más o menos equivalente a la iteración en cada búfer y ejecutar comandos. Por ejemplo, digamos que usted quiere hacer una búsqueda y reemplazo a lo largo de todos los tampones:

:bufdo! %s/FIND/REPLACE/g 

O digamos que queremos eliminar todas las líneas de texto que coinciden con la expresión regular "SQL" de todos los tampones:

:bufdo! g/SQL/del 

O tal vez queremos establecer el archivo de codificación UTF-8 en todos los tampones:

:bufdo! set fenc=utf-8 

lo anterior se pueden extrapolar para Windows (:windo), aquí (:tabdo) y argumentos (:argdo). Ver ayuda en: bufdo para más información.

+1

Mira aquí http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers – Rod

+0

Esta no es una buena respuesta. Incluso si es correcto, requiere mirar a través de los comentarios seguidos por la búsqueda de documentación que puede o no proporcionar la respuesta. Es decepcionante ver a un usuario veterano de SO responder a una pregunta de esta manera. – arman

+1

He agregado algunos ejemplos y aclaraciones que espero sean útiles. Avíseme si aún cree que le falta algo. –

1

No creo que sea posible extender la 'n' a través de archivos o búferes. Se podría utilizar

:grep blah * 

y luego hacer

:cn 

Para pasar a la siguiente línea con bla en él. Eso cambiará de un archivo a otro, pero no es tan claro. Es más engorroso escribir el colon todo el tiempo, y solo te llevará a la línea, no a la palabra.

Lo que suelo hacer es abrir los archivos que quiero buscar en pestañas y luego usar 'n' y 'gt' para saltar a la siguiente pestaña cuando llego al final del archivo, o enumerar los archivos en el línea de comando a Puedo pasar al siguiente archivo con ': wn' cuando termine de editarlo.

Espero que ayude!

0

abriría todas las memorias intermedias en una nueva pestaña usando los dos comandos siguientes:

:tab sp 
:bufdo sp 

A continuación, buscar a través de cada archivo uno por uno y cerrar su ventana cuando haya terminado (use :q o :close). Use CTRL + W_ para maximizar cada ventana mientras trabaja en ella. Cuando hayas terminado y cierres la última ventana, la página de pestañas se cerrará y volverás a estar donde estuviste antes de que decidieras hacer la búsqueda.

21

Podemos hacer esto utilizando vimgrep y búsqueda a través de la argslist. Pero primero vamos a pueblan nuestra argslist con todas nuestras memorias intermedias:

:bufdo :args ## % 

Ahora podemos buscar en nuestra argslist

:vimgrep /blah/ ## 

Dónde % == the current filepath y ## == the arglist.

recomiendo ver estos vimcasts si desea obtener más información: Populate the arglist, Search multiple files with vimgrep

+2

¡Gracias! Esto es exactamente lo que he estado buscando desde hace mucho tiempo. (Faltaba el argumento '##' vimgrep.) Supongo que también podemos agregar argumentos a la lista usando ': arga [dd]', como alternativa. –

+0

En vim '##' es el arglist actual y '%' es el nombre del archivo actual. Primero aclaramos el arglist actual con ':% argd', luego usamos': bufdo' para agregar los almacenamientos intermedios al arglist uno a la vez. Finalmente, usamos ': vimgrep' con' ## 'para buscar en el arglist. – JPaget

0

Cada vez que desee cambiar a otro búfer intente esto.

:b + <any part of file in buffer> + tab 

Por ejemplo. Tengo esto en mi memoria intermedia

77 línea "/var/www/html/TopMenuAlertAlert.vue" 65
78 "/var/www/html/MainSidebar.vue" línea 29
79 "/ var /www/html/FullScreenSearch.vue" línea 26
80 "" línea 93
81 "/var/www/html/Menu.vue /var/www/html/layouts/RightSidebar.vue" línea 195

Como quiero cambiar a otro buffer, probablemente recuerdo algunos detalles sobre el archivo como 'Alert'

Así que sólo van

:b Alert + tab 

si el archivo dado no es el que yo quiero, yo sigo en la pestaña de prensado.

Vim continuará dando el próximo archivo cerca de él.

Una vez que lo tienes. Presione Enter.

Cuestiones relacionadas