tutorial texto insertar español editar curso crear con comandos archivos archivo vim vi

texto - vim tutorial



¿Cómo trabajar efectivamente con múltiples archivos en Vim? (27)

Listado

Para ver una lista de buffers actuales, uso:

:ls

Apertura

Para abrir un nuevo archivo, utilizo

:e ../myFile.pl

con finalización de tabulación mejorada (ponga set wildmenu en su .vimrc ).

Nota: también puede usar :find que buscará un conjunto de rutas para usted, pero primero necesita personalizar esas rutas.

Traspuesta

Para cambiar entre todos los archivos abiertos, uso

:b myfile

con la finalización de la pestaña mejorada (todavía set wildmenu ).

Nota:: :b# elige el último archivo visitado, por lo que puede usarlo para cambiar rápidamente entre dos archivos.

Usando ventanas

Ctrl-W s Ctrl-W v para dividir la ventana actual horizontal y verticalmente. También puede usar :split y :vertical split ( :sp y :vs )

Ctrl-W w para cambiar entre ventanas abiertas, y Ctrl-W h (o j o k o l ) para navegar a través de ventanas abiertas.

Ctrl-W c para cerrar la ventana actual, y Ctrl-W o para cerrar todas las ventanas excepto la actual.

Al iniciar vim con una -o o -O , se abre cada archivo en su propia división.

Con todo esto no necesito pestañas en Vim, y mis dedos encuentran mis buffers, no mis ojos.

Nota: si desea que todos los archivos vayan a la misma instancia de Vim, inicie Vim con la opción --remote-silent .

Comencé a usar Vim para desarrollar scripts de Perl y estoy empezando a encontrarlo muy poderoso.

Una cosa que me gusta es poder abrir varios archivos a la vez con, por ejemplo, vi main.pl maintenance.pl y luego saltar entre ellos con:

:n :prev

y ver qué archivos están abiertos con

:args

Y para agregar un archivo, puedo decir:

:n test.pl

que espero que luego se AGREGARÁ a mi lista de archivos, pero en lugar de eso borra mi lista de archivos actual y cuando test.pl :args solo tengo test.pl abierto.

Entonces, ¿cómo puedo AGREGAR y QUITAR archivos a mi lista de argumentos?


¿Por qué no usar pestañas (introducidas en Vim 7)? Puede alternar entre las pestañas con :tabn y :tabp , con :tabe <filepath> puede agregar una nueva pestaña; y con un regular :q o :wq cierra una pestaña. Si :tabn y :tabp a sus teclas F7 / F8 , puede cambiar fácilmente entre archivos.

Si no hay tantos archivos o no tiene Vim 7, también puede dividir la pantalla en varios archivos :sp <filepath> . Luego puede cambiar entre las pantallas divididas con Ctrl + W y luego una tecla de flecha en la dirección que desea mover (o en lugar de las teclas de flecha, w para la siguiente pantalla dividida y W para la anterior)


Agregar otra respuesta ya que esto no está cubierto por ninguna de las respuestas

Para cambiar todos los buffers a la vista de tab .

:tab sball

abrirá todos los buffers a la vista de pestañas. Entonces podemos usar cualquier comando relacionado con pestañas.

gt or :tabn " go to next tab gT or :tabp or :tabN " go to previous tab

detalles en :help tab-page-commands .

Podemos indicar a vim que abra, como vista de pestaña, varios archivos por vim -p file1 file2 . alias vim=''vim -p'' será útil.
Lo mismo se puede lograr al tener que seguir la función de autocomando en ~/.vimrc

au VimEnter * if !&diff | tab all | tabfirst | endif

De todos modos para responder a la pregunta: Para agregar a la lista arg: arga file ,

Para borrar de la lista arg: argd pattern

Más en :help arglist


Algunas respuestas en este hilo sugieren el uso de pestañas y otras sugieren el uso de un búfer para lograr lo mismo. Las pestañas y los tampones son diferentes. Le sugiero encarecidamente que lea este artículo Vim Tab madness - Buffers vs Tabs

Aquí hay un buen resumen que saqué del artículo:

Resumen:

  • Un búfer es el texto en memoria de un archivo.
  • Una ventana es una ventana gráfica en un búfer.
  • Una página de pestaña es una colección de ventanas.

Cosas como :e y :badd solo aceptarán UN argumento, por lo tanto, lo siguiente fallará

:e foo.txt bar.txt :e /foo/bar/*.txt :badd /foo/bar/*

Si desea agregar varios archivos desde vim, use arga[dd]

:arga foo.txt bar.txt :arga /foo/bar/*.txt :argadd /foo/bar/*


Creo que puede estar usando el comando incorrecto para ver la lista de archivos que tiene abiertos.

Intente hacer un :ls para ver la lista de archivos que ha abierto y verá:

1 %a "./checkin.pl" line 1 2 # "./grabakamailogs.pl" line 1 3 "./grabwmlogs.pl" line 0 etc.

Luego puede rebotar a través de los archivos refiriéndose a ellos por los números listados, por ejemplo: 3b

o puede dividir su pantalla ingresando el número pero usando sb en lugar de solo b.

Como un lado,% se refiere al archivo actualmente visible y # se refiere al archivo alternativo.

Puede alternar fácilmente entre estos dos archivos presionando Ctrl Mayús 6

Editar: me gusta :ls puede usar :reg para ver el contenido actual de sus registros, incluidos los registros 0-9 que contienen lo que ha eliminado. Esto es especialmente útil si desea reutilizar un texto que ha eliminado previamente.


Cuando comencé a usar VIM, no me di cuenta de que se suponía que las pestañas debían usarse como diseños de ventanas diferentes, y el búfer cumple la función de edición / cambio de archivos múltiples entre sí. En realidad, al principio, las pestañas ni siquiera están allí antes de v7.0 y acabo de abrir un VIM dentro de una pestaña de terminal (estaba usando gnome-terminal en este momento), y alterno entre pestañas usando alt + números, ya que pensé que usar comandos como : buffers,: bn y: bp eran demasiado para mí. Cuando se lanzó VIM 7.0, encuentro que es más fácil administrar muchos archivos y cambiarlos, pero recientemente me di cuenta de que los búferes deberían ser siempre el camino a seguir, a menos que una cosa sea: debe configurarlo para que funcione correctamente.

Así que probé vim-airline y habilité la barra de búfer visual en la parte superior de la pestaña, pero el gráfico tenía problemas con mi iTerm2, así que probé un par de otros y parece que MBE funciona mejor para mí. También configuro shift + h / l como accesos directos, ya que los originales (moverse a la cabecera / cola de la página actual) no me resultan muy útiles.

map <Sh> :bprev<Return>
map <Sl> :bnext<Return>

Parece ser incluso más fácil que gt y gT, y: e es más fácil que: tabnew también. Creo que bd no es tan conveniente como: q (MBE está teniendo algún problema), pero creo que puedo vivir con todos los archivos en el búfer.


Cuando uso múltiples archivos en vim, uso estos comandos principalmente (con ~ 350 archivos abiertos):

  • :b <partial filename><tab> (saltar a un búfer)
  • :bw (borrado de búfer, eliminar un búfer)
  • :e <file path> (edite, abra un nuevo búfer>
  • pltags - habilita saltar a subrutina / definiciones de métodos

Es posible que desee utilizar marcas globales Vim .

De esta manera puede rebotar rápidamente entre archivos, e incluso a la ubicación marcada en el archivo. Además, los comandos son cortos: ''C me lleva al código con el que estoy trabajando ''T , me lleva a la prueba de unidad con la que estoy trabajando.

Cuando cambia de lugar, restablecer las marcas también es rápido: mC marca el nuevo punto de código, mT marca el nuevo punto de prueba.


Hice un video muy simple que muestra el flujo de trabajo que uso. Básicamente, uso el complemento Ctrl-P Vim, y asigné la navegación del búfer a la tecla Intro.

De esta manera, puedo presionar Enter en el modo normal, mirar la lista de archivos abiertos (que aparece en una pequeña ventana nueva en la parte inferior de la pantalla), seleccionar el archivo que quiero editar y presionar Enter nuevamente. Para buscar rápidamente a través de múltiples archivos abiertos, simplemente escriba parte del nombre del archivo, seleccione el archivo y presione Entrar.

No tengo muchos archivos abiertos en el video, pero se vuelve increíblemente útil cuando empiezas a tener muchos de ellos.

Ya que el complemento ordena los buffers usando un pedido de MRU, puede presionar Enter dos veces y saltar al archivo más reciente que estaba editando.

Después de instalar el complemento, la única configuración que necesita es:

nmap <CR> :CtrlPBuffer<CR>

Por supuesto, puede asignarlo a una clave diferente, pero creo que la asignación a ingresar es muy útil.


La mayoría de las respuestas en este hilo están usando comandos de vim sin formato, lo que por supuesto está bien, pero pensé que proporcionaría una respuesta extensa utilizando una combinación de complementos y funciones que me parecen particularmente útiles (al menos algunos de estos consejos provienen del archivo de Gary Bernhardt consejos de navegación ):

  1. Para alternar entre los dos últimos archivos, simplemente presione <leader> dos veces. Recomiendo asignar <leader> a la barra espaciadora:

    nnoremap <leader><leader> <c-^>

  2. Para moverse rápidamente alrededor de un proyecto, la respuesta es una solución de coincidencia CtrlP , como CtrlP . Lo vinculo a <leader>a para un acceso rápido.

  3. En el caso que quiera ver una representación visual de los buffers abiertos actualmente, uso el complemento BufExplorer . Sencillo pero efectivo.

  4. Si quisiera navegar por el sistema de archivos, usaría la línea de comandos o una utilidad externa (Quicklsilver, Afred, etc.) pero para ver la estructura del proyecto actual, el Nerdtree es un clásico. Sin embargo, no use esto en lugar de 2 como su método principal de búsqueda de archivos. Realmente te ralentizará. Yo uso el enlace <leader>ff .

Esto debería ser suficiente para encontrar y abrir archivos. A partir de ahí, por supuesto, usar divisiones horizontales y verticales. Respecto a las divisiones, encuentro estas funciones particularmente útiles:

  1. Abra nuevas divisiones en áreas más pequeñas cuando no haya suficiente espacio y expándalos en la navegación. Consulte aquí para comentarios sobre lo que estos hacen exactamente:

    set winwidth=84 set winheight=5 set winminheight=5 set winheight=999 nnoremap <C-w>v :111vs<CR> nnoremap <C-w>s :rightbelow split<CR> set splitright

  2. Mover de división a división fácilmente:

    nnoremap <C-J> <C-W><C-J> nnoremap <C-K> <C-W><C-K> nnoremap <C-L> <C-W><C-L> nnoremap <C-H> <C-W><C-H>


Mi manera de trabajar efectivamente con múltiples archivos es usar tmux.

Te permite dividir ventanas vertical y horizontalmente, como en:

Lo tengo funcionando de esta manera tanto en mi máquina Mac como en Linux, y lo encuentro mejor que el mecanismo de conmutación de panel de ventana nativo que se proporciona (en Mac). Encuentro que el cambio es más fácil y solo con tmux he podido obtener la ''nueva página en el mismo directorio actual'' trabajando en mi mac (a pesar del hecho de que parece haber opciones para abrir nuevos paneles en el mismo directorio), que es Una pieza sorprendentemente crítica. Un nuevo panel instantáneo en la ubicación actual es increíblemente útil. Un método que crea nuevos paneles con las mismas combinaciones de teclas para ambos sistemas operativos es fundamental para mí y un bono para todos para la futura compatibilidad personal. Aparte de los múltiples paneles tmux, también he intentado usar varias pestañas, por ejemplo, y múltiples ventanas nuevas, por ejemplo, y, en última instancia, he encontrado que los múltiples paneles tmux son los más útiles para mí. Soy muy ''visual'' y me gusta mantener mis diversos contextos justo frente a mí, conectados entre sí como paneles.

tmux también admite paneles horizontales y verticales que la screen anterior no (aunque mac iterm2 parece admitirlo, pero de nuevo, la configuración actual del directorio no me funcionó). tmux 1.8


Muchas respuestas aquí! Lo que uso sin reinventar la rueda: los complementos más famosos (que no van a morir en el corto plazo y son utilizados por muchas personas) para ser ultra rápidos y geek.

  • ctrlpvim / ctrlp.vim - para buscar el archivo por nombre búsqueda difusa por su ubicación o simplemente su nombre
  • jlanzarotta / bufexplorer - para buscar buffers abiertos (cuando no recuerda cuántos archivos abrió y modificó recientemente y no recuerda dónde están, probablemente porque los buscó con Ag)
  • rking / ag.vim para buscar los archivos con respecto a gitignore
  • scrooloose / nerdtree para ver la estructura del directorio, buscar, agregar / eliminar / modificar archivos

ACTUALIZACIÓN : Recientemente estoy usando dyng / ctrlsf.vim para buscar con vista contextual (como Búsqueda sublime) y cambié el motor de ag a ripgrep . El rendimiento es sobresaliente.


Para agregar a la lista de args :

:argadd

Para borrar de la lista de args :

:argdelete

En su ejemplo, podría usar :argedit test.pl para agregar test.pl a la lista de argumentos y editar el archivo en un solo paso.

:help args da mucho más detalle y uso avanzado


Prueba los siguientes mapas para mayor comodidad al editar varios archivos.

"ventanas divididas

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"moviéndose alrededor

nmap <Cj> <Cw>j

nmap <Ck> <Cw>k

nmap <Cl> <Cw>l

nmap <Ch> <Cw>h


Puedes ser un loco absoluto y alias vim a vim -p agregando en tu .bashrc :

alias vim="vim -p"

Esto dará como resultado la apertura de varios archivos desde el shell en pestañas, sin tener que invocar :tab ball desde dentro de vim después.


Si solo uso los comandos incorporados de vim , el mejor que he visto para cambiar entre varios buffers es este:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Combina perfectamente los comandos :ls y :b : enumera todos los búferes abiertos y espera a que ingrese el comando para cambiar de búfer.

Dada la asignación anterior en vimrc, una vez que escribe <Leader>f ,

  • Se muestran todos los buffers abiertos
  • Usted puede:
    • Escribe 23 para ir al buffer 23,
    • Escriba # para ir al búfer alternativo / MRU,
    • Escriba el nombre parcial del archivo, luego escriba <Tab> o <Ci> para autocompletar,
    • O simplemente <CR> o <Esc> para permanecer en el búfer actual

Una instantánea de la salida de la asignación de teclas anterior es:

:set nomore|:ls|:set more 1 h "script.py" line 1 2 #h + "file1.txt" line 6 -- ''#'' for alternative buffer 3 %a "README.md" line 17 -- ''%'' for current buffer 4 "file3.txt" line 0 -- line 0 for hasn''t switched to 5 + "/etc/passwd" line 42 -- ''+'' for modified :b ''<Cursor> here''

En la instantánea de arriba:

  • Segunda columna: %a para actual, h para oculto, # para anterior, vacío para no se ha cambiado a.
  • Tercera columna: + para modificado.

Además, te sugiero encarecidamente set hidden . Ver :help ''hidden'' .


Si estás en osx y quieres poder hacer clic en tus pestañas, usa MouseTerm y SIMBL (tomado de here ). Además, echa un vistazo a esta discusión relacionada .


Si va a utilizar varios búferes, creo que lo más importante es establecer el modo oculto para que le permita cambiar los búferes incluso si tiene cambios no guardados en el que está dejando.


Uso comandos de búfer - :bn (búfer siguiente) :bp (búfer anterior) :buffers (lista de búferes abiertos) :b<n> (búfer abierto n) :bd (borrar búfer). :e <filename> se abrirá en un nuevo búfer.


Uso el mismo archivo .vimrc para GVim y la línea de comandos vim. Tiendo a usar pestañas en GVim y buffers en la línea de comandos vim, así que tengo mi .vimrc configurado para facilitar el trabajo con ambos:

" Movement between tabs OR buffers nnoremap L :call MyNext()<CR> nnoremap H :call MyPrev()<CR> " MyNext() and MyPrev(): Movement between tabs OR buffers function! MyNext() if exists( ''*tabpagenr'' ) && tabpagenr(''$'') != 1 " Tab support && tabs open normal gt else " No tab support, or no tabs open execute ":bnext" endif endfunction function! MyPrev() if exists( ''*tabpagenr'' ) && tabpagenr(''$'') != ''1'' " Tab support && tabs open normal gT else " No tab support, or no tabs open execute ":bprev" endif endfunction

Esto incluye las asignaciones existentes para H y L, pero hace que el cambio entre archivos sea extremadamente rápido y fácil. Simplemente presione "H" para el siguiente y "L" para el anterior; Ya sea que esté utilizando pestañas o búferes, obtendrá los resultados deseados.


Uso múltiples búferes que están ocultos en mi archivo ~/.vimrc .

La secuencia de comandos mini-buffer explorer también es buena para obtener una buena lista compacta de sus buffers. Luego :b1 o :b2 ... para ir al búfer apropiado o usar el explorador de mini búfer y la pestaña a través de los búferes.


Utilizo la línea de comandos y git mucho, así que tengo este alias en mi bashrc:

alias gvim="gvim --servername /$(git rev-parse --show-toplevel || echo ''default'') --remote-tab"

Esto abrirá cada nuevo archivo en una nueva pestaña en una ventana existente y creará una ventana para cada repositorio de git. Entonces, si abre dos archivos del repositorio A, y 3 archivos del repositorio B, terminará con dos ventanas, una para el repositorio A con dos pestañas y otra para el repositorio B con tres pestañas.

Si el archivo que está abriendo no está contenido en un repositorio de git, irá a una ventana predeterminada.

Para saltar entre pestañas utilizo estas asignaciones:

nmap <C-p> :tabprevious<CR> nmap <C-n> :tabnext<CR>

Para abrir varios archivos a la vez, debe combinar esto con una de las otras soluciones.


Utilizo lo siguiente, esto te da muchas características que esperas tener en otros editores como Sublime Text / Textmate

  1. Utilice buffers no ''pestañas''. Los buffers son el mismo concepto que las pestañas en casi todos los demás editores.
  2. Si desea la misma apariencia de tener pestañas, puede usar el complemento vim-airline con la siguiente configuración en su .vimrc : let g:airline#extensions#tabline#enabled = 1 . Esto muestra automáticamente todos los buffers como encabezados de pestañas cuando no tiene páginas de pestañas abiertas
  3. Utilice la vim-unimpaired Tim Pope que proporciona [ b y ] b para pasar a los búferes anteriores / siguientes respectivamente (más una gran cantidad de otras golosinas)
  4. Tenga set wildmenu en su .vimrc cuando escriba :b <file part> + Tab para un búfer, obtendrá una lista de búferes posibles que puede usar las flechas izquierda / derecha para desplazarse por
  5. Utilice el complemento de vim-obsession Tim Pope para almacenar sesiones que funcionen bien con la línea aérea (tuve mucho dolor con las sesiones y los complementos )
  6. Utilice el plugin de vim-vinegar Tim Pope. Esto funciona con el nativo :Explore pero hace que sea mucho más fácil trabajar con él. Simplemente escriba - para abrir el explorador, que es la misma clave que para subir un directorio en el explorador. Hace que la navegación sea más rápida (sin embargo, con fzf rara vez uso esto)
  7. fzf (que se puede instalar como un complemento de vim) también es un buscador borroso realmente poderoso que puede usar para buscar archivos (y búferes también). fzf también juega muy bien con fd (una versión más rápida de find)
  8. Use Ripgrep con vim-ripgrep para buscar en su base de código y luego puede usar :cdo en los resultados para buscar y reemplazar

Vim (¡pero no el Vi original!) Tiene pestañas que me parecen (en muchos contextos) superiores a los buffers. Puede decir :tabe [filename] para abrir un archivo en una nueva pestaña. El ciclo entre las pestañas se realiza haciendo clic en la pestaña o mediante las combinaciones de teclas [ n ] gt y gT . Vim gráfica incluso tiene pestañas gráficas.


Yo sugeriría usar el plugin

NERDtree

Aquí está el enlace github con instrucciones.

Nerdtree

Yo uso vim-plug como administrador de complementos, pero también puedes usar Vundle.

vim-plug

Vundle


:ls

para la lista de buffers abiertos

  • :bp buffer anterior
  • :bn siguiente buffer
  • :bn ( n un número) se mueve al noveno búfer
  • :b <filename-part> con la tecla de tabulación que proporciona la finalización automática (¡impresionante!)

En algunas versiones de vim, bn y bp son en realidad bnext y bprevious respectivamente. La pestaña autocompletar es útil en este caso.

O cuando esté en modo normal, use ^ para cambiar al último archivo en el que estaba trabajando.

Además, puedes guardar sesiones de vim.

:mksession! ~/today.ses

El comando anterior guarda los buffers y configuraciones de archivos abiertos actuales en ~/today.ses . Puedes cargar esa sesión usando

vim -S ~/today.ses

Sin problemas recordando donde lo dejaste ayer. ;)