Pregunta

Empecé a usar Vim para desarrollar scripts en Perl y empiezo 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 salta entre ellos con:

:n
:prev

y ver con qué archivos están abiertos

:args

Y para agregar un archivo, puedo decir:

:n test.pl

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

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

¿Fue útil?

Solución

¿Por qué no utilizar pestañas (introducidas en Vim 7)?Puedes cambiar entre pestañas con :tabn y :tabp, Con :tabe <filepath> puedes agregar una nueva pestaña;y con regularidad :q o :wq cierras una pestaña.si mapeas :tabn y :tabp para usted F7/F8 teclas, puede cambiar fácilmente entre archivos.

Si no hay tantos archivos o no tienes Vim 7, también puedes dividir tu pantalla en varios archivos: :sp <filepath>.Luego puedes cambiar entre pantallas divididas con Control+W. y luego una tecla de flecha en la dirección en la que desea moverse (o en lugar de teclas de flecha, w para el próximo y W. para pantalla dividida anterior)

Otros consejos

Listado

Para ver una lista de buffers actuales, uso:

:ls

Apertura

Para abrir un nuevo archivo, uso

:e ../myFile.pl

con finalización de tabulación mejorada (poner set wildmenu en tus .vimrc).

Nota:también puedes usar :find que buscará un conjunto de rutas por usted, pero primero debe personalizar esas rutas.


Traspuesta

Para cambiar entre todos los archivos abiertos, uso

:b myfile

con finalización de pestañas mejorada (aún set wildmenu).

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


Usando ventanas

Ctrl-W s y Ctrl-W v para dividir la ventana actual horizontal y verticalmente.También puedes 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.

Iniciando vim con un -o o -O flag 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 el --remote-silent opción.

:ls

para obtener una lista de buffers abiertos

  • :bp búfer anterior
  • :bn siguiente buffer
  • :bn (n un número) moverse al n-ésimo búfer
  • :b <filename-part> con tecla de tabulación que proporciona autocompletado (¡¡increíble!!)

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

O cuando estés en modo normal, usa ^ 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 búferes y la configuración del archivo abierto actual en ~/today.ses.Puedes cargar esa sesión usando

vim -S ~/today.ses

No tendrás problemas para recordar dónde lo dejaste ayer.;)

Para agregar a la args lista:

:argadd

Para eliminar del args lista:

:argdelete

En tu ejemplo, podrías usar :argedit test.pl para agregar test.pl al args enumerar y editar el archivo en un solo paso.

:help args ofrece muchos más detalles y uso avanzado

Yo uso comandos de búfer - :bn (siguiente búfer), :bp (búfer anterior) :buffers (lista de buffers abiertos) :b<n> (búfer abierto n) :bd (eliminar búfer). :e <filename> simplemente se abrirá en un nuevo búfer.

Creo que es posible que esté utilizando el comando incorrecto para ver la lista de archivos que tiene abiertos.

Intenta hacer un :ls para ver la lista de archivos que tienes abiertos y verás:

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

Luego puede recorrer los archivos haciendo referencia a ellos mediante los números enumerados, p.:3b

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

Como comentario aparte, % se refiere al archivo actualmente visible y # se refiere al archivo alternativo.

Puede alternar fácilmente entre estos dos archivos presionando Control Cambio 6

Editar:como :ls puedes 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 algún texto que haya eliminado anteriormente.

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

¡Muchas respuestas aquí!Lo que uso sin reinventar la rueda: los complementos más famosos (que no van a desaparecer pronto y son utilizados por mucha gente) para que sean ultra rápidos y geek.

  • ctrlpvim/ctrlp.vim - para buscar archivos por nombre, búsqueda difusa por su ubicación o solo por su nombre
  • jlanzarotta/bufexplorer - para explorar los buffers abiertos (cuando no recuerdas cuántos archivos abriste y modificaste recientemente y no recuerdas dónde están, probablemente porque los buscaste con Ag)
  • reying/ag.vim para buscar los archivos con respecto a gitignore
  • scrooloose/nerdtree para ver la estructura del directorio, buscar, agregar/eliminar/modificar archivos

ACTUALIZAR :Recientemente estoy usando dyng/ctrlsf.vim para buscar con vista contextual (como la búsqueda Sublime) y cambié el motor de ag a ripgrep.La actuación es sobresaliente.

Cosas como :e y :badd solo aceptará UN argumento, por lo tanto el 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/*

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

  • :b <partial filename><tab> (saltar a un buffer)
  • :bw (borrar el búfer, eliminar un búfer)
  • :e <file path> (editar, abrir un nuevo buffer>
  • pltags - habilitar el salto a definiciones de subrutina/método

Algunas respuestas en este hilo sugieren usar pestañas y otras sugieren usar buffer para lograr lo mismo.Las pestañas y los búferes son diferentes.Te recomiendo encarecidamente que leas este artículo. Locura de Vim Tab - 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ñas es una colección de ventanas.

Es posible que desee utilizar Marcas globales de Vim.

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

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

Utilizo el mismo archivo .vimrc para GVim y la línea de comando vim.Tiendo a usar pestañas en GVim y buffers en la línea de comando vim, así que tengo mi .vimrc configurado para que trabajar con ambos sea más fácil:

" 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 afecta 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é usando pestañas o buffers, obtendrá los resultados deseados.

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

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

Para cambiar todos los buffers a tab vista.

 :tab sball

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

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

detalles en :help tab-page-commands.

Podemos indicarle a vim que abra, como vista de pestaña, múltiples archivos vim -p file1 file2. alias vim='vim -p' será útil.
Lo mismo también se puede lograr teniendo el siguiente comando automático en ~/.vimrc

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

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

Para eliminar de la lista de argumentos: argd pattern

Mas en :help arglist

Mi forma de trabajar eficazmente con varios archivos es utilizar tmux.

Le permite dividir ventanas vertical y horizontalmente, como en:

enter image description here

Lo tengo funcionando de esta manera tanto en mi máquina Mac como en mi Linux y lo encuentro mejor que el mecanismo nativo de cambio de panel de ventana que se proporciona (en Mac).Encuentro que el cambio es más fácil y solo con tmux he podido hacer que la 'nueva página en el mismo directorio actual' funcione en mi mac (a pesar de que parece haber opciones para abrir nuevos paneles en el mismo directorio), lo cual 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 una ventaja para todos en cuanto a compatibilidad personal futura.Además de varios paneles tmux, también intenté usar varias pestañas, p. enter image description here y múltiples ventanas nuevas, p. enter image description here y finalmente descubrí que 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 los más antiguos screen no lo hizo (aunque iterm2 de Mac parece admitirlo, pero nuevamente, la configuración del directorio actual no funcionó para mí).tmux 1.8

Si usando solo comandos integrados de vim, el mejor que he visto para cambiar entre múltiples buffers es este:

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

Combina perfectamente ambos :ls y :b comandos: enumera todos los buffers abiertos y espera a que ingrese el comando para cambiar el buffer.

Dado el mapeo anterior en vimrc, una vez que escriba <Leader>f,

  • Se muestran todos los buffers abiertos
  • Puede:
    • Tipo 23 para ir al buffer 23,
    • Tipo # para ir al buffer alternativo/MRU,
    • Escriba el nombre parcial del archivo, luego escriba <Tab>, o <C-i> para autocompletar,
    • O solo <CR> o <Esc> para permanecer en el buffer actual

Una instantánea del resultado de la asignación de claves 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 anterior:

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

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

Utilizo lo siguiente, esto te brinda muchas características que esperarías tener en otros editores como Sublime Text/Textmate.

  1. Utilice buffers, no 'páginas con pestañas'.Los buffers son el mismo concepto que las pestañas en casi todos los demás editores.
  2. Si quieres el mismo aspecto de tener pestañas, puedes usar el aerolínea-vim complemento 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 pestañas abiertas
  3. Utilice Tim Pope vim-ilegal lo que da [b y ]b para pasar a los buffers anteriores/siguientes respectivamente (además de una gran cantidad de otras ventajas)
  4. Tener set wildmenu en tus .vimrc luego cuando escribes :b <file part> + Pestaña para un búfer obtendrá una lista de posibles búferes por los que puede usar las flechas izquierda/derecha para desplazarse
  5. Utilice Tim Pope obsesión-vim complemento para almacenar sesiones que funcionan bien con la aerolínea (tenía mucho dolor con sesiones y complementos)
  6. Utilice Tim Pope vinagre-vim enchufar.Esto funciona con el nativo. :Explore pero hace que sea mucho más fácil trabajar con él.solo escribe - 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 vim) también es un buscador difuso realmente poderoso que puede usar para buscar archivos (y también buffers).fzf también juega muy bien con fd (una versión más rápida de buscar)
  8. Usar Ripgrep con vim-ripgrep para buscar en su base de código y luego puede usar :cdo en los resultados para hacer búsqueda y reemplazo

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

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

Esto abrirá cada archivo nuevo 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, debes combinar esto con una de las otras soluciones.

Utilizo varios buffers que están ocultos en mi ~/.vimrc archivo.

El script del explorador de minibúfer también es útil para obtener una lista compacta y agradable de sus búferes.Entonces :b1 o :b2...para ir al búfer apropiado o usar el explorador de minibúfer y desplazarse por los búferes.

Intente seguir 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

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h

Hice una vídeo muy simple mostrando el flujo de trabajo que uso.Básicamente uso el Ctrl-P Complemento de Vim y asigne la navegación del búfer a la tecla Enter.

De esta manera puedo presionar Enter en 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 entre varios archivos abiertos, simplemente escriba parte del nombre del archivo, seleccione el archivo y presione Entrar.

No tengo muchos archivos abiertos en el vídeo, pero resulta increíblemente útil cuando empiezas a tener muchos.

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

Una vez instalado el complemento, la única configuración que necesita es:

nmap <CR> :CtrlPBuffer<CR>

Por supuesto, puede asignarlo a una clave diferente, pero la asignación para ingresar me parece muy útil.

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 ventana diferentes, y el búfer cumple la función de editar/cambiar múltiples archivos entre sí.En realidad, al principio las pestañas ni siquiera estaban allí antes de v7.0 y simplemente abrí un VIM dentro de una pestaña de terminal (estaba usando gnome-terminal en este momento) y cambié entre pestañas usando alt+números, ya que pensé en usar comandos como :buffers, :bn y :bp fueron demasiado para mí.Cuando se lanzó VIM 7.0, encontré que era más fácil administrar muchos archivos y cambiar a él, pero recientemente me di cuenta de que los buffers siempre deberían ser el camino a seguir, a menos que haya una cosa:necesitas configurarlo para que funcione correctamente.

Así que probé vim-airline y habilité la barra de búfer visual en forma de pestaña en la parte superior, 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 configuré shift+h/l como atajos, ya que los originales (moverse al principio/final de la página actual) no me son muy útiles.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

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

tu puedes ser un loco absoluto y alias vim a vim -p añadiendo tu .bashrc:

alias vim="vim -p"

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

Sugeriría usar el complemento.

NERDárbol

Aquí está el enlace de github con instrucciones.

nerdtree

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

enchufe vim

Vundle

Si estás en OSX y quieres poder hacer clic en tus pestañas, usa MouseTerm y SIMBL (tomado de aquí).Además, mira esto. discusión relacionada.

La mayoría de las respuestas en este hilo usan comandos vim simples, lo cual por supuesto está bien, pero pensé en proporcionar una respuesta extensa usando una combinación de complementos y funciones que encuentro particularmente útiles (al menos algunos de estos consejos provienen de Consejos de navegación de archivos de Gary Bernhardt):

  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 por un proyecto, la respuesta es una solución de coincidencia difusa como CtrlP.lo ato a <leader>a para un acceso rápido.

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

  4. Si quiero navegar por el sistema de archivos, usaría la línea de comandos o una utilidad externa (Quicklsilver, Afred, etc.), pero para observar la estructura actual del proyecto. Árbol nerd es un clásico.No utilices esto en lugar de 2 como método principal de búsqueda de archivos.Realmente te ralentizará.yo uso la encuadernación <leader>ff.

Estos deberían ser suficientes para buscar y abrir archivos.A partir de ahí, por supuesto, utilice divisiones horizontales y verticales.En cuanto a las divisiones, encuentro estas funciones particularmente útiles:

  1. Abra nuevas divisiones en áreas más pequeñas cuando no haya suficiente espacio y amplíelas en la navegación.Referirse aquí para comentarios sobre qué 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. Pasar de una división a otra 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>
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top