Empecé a usar Vim para desarrollar scripts de Perl y estoy empezando a encontrarlo muy poderoso.
Una cosa que me gusta es poder abrir múltiples archivos a la vez con:
vi main.pl maintenance.pl
y luego salta entre ellos con:
:n
:prev
y ver qué archivo están abiertos con:
:args
Y para agregar un archivo, puedo decir:
:n test.pl
que espero que luego se agregue a mi lista de archivos, pero en su lugar borra mi lista de archivos actual y cuando escribo :args
solo tengo test.pl
abierto.
Entonces, ¿cómo puedo agregar y eliminar archivos en mi lista de argumentos?
:N
parece una forma más fácil de ir al archivo anterior ...Respuestas:
¿Por qué no usar pestañas (introducidas en Vim 7)? Puede cambiar entre pestañas con
:tabn
y:tabp
, Con:tabe <filepath>
puede agregar una nueva pestaña; y con un regular:q
o:wq
cierras una pestaña. Si asigna:tabn
y:tabp
a sus teclas F7/ F8puede cambiar fácilmente entre archivos.Si no hay esa cantidad de archivos o que no tienen Vim 7 también se puede dividir la pantalla en varios archivos:
:sp <filepath>
. Luego puede cambiar entre pantallas divididas con Ctrl+ Wy luego una tecla de flecha en la dirección que desea mover (o en lugar de las teclas de flecha, wpara la Wpantalla de división siguiente y anterior)fuente
ZZ
lugar de:wq
(al igual que normalmente guardaría y cerraría)gt
va a la siguiente pestaña ygT
va a la pestaña anterior.-p
indicador para abrir varios archivos en pestañas desde la línea de comandos. Por ejemplo,gvim -p main.pl maintenance.pl
abrirá estos dos archivos en pestañas.Listado
Para ver una lista de buffers actuales, uso:
Apertura
Para abrir un nuevo archivo, uso
con finalización de pestañas mejorada (poner
set wildmenu
en su.vimrc
).Nota: también puede usar el
:find
que buscará un conjunto de rutas por usted, pero primero debe personalizar esas rutas.Traspuesta
Para cambiar entre todos los archivos abiertos, uso
con finalización de pestañas mejorada (aún
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
yCtrl-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 alternar entre ventanas abiertas, yCtrl-W h
(oj
ok
ol
) para navegar a través de ventanas abiertas.Ctrl-W c
para cerrar la ventana actual yCtrl-W o
para cerrar todas las ventanas excepto la actual.Al iniciar vim con un indicador
-o
o se-O
abre cada archivo en su propia división.Con todo esto, no necesito pestañas en Vim, y mis dedos encuentran mis amortiguadores, no mis ojos.
Nota: si desea que todos los archivos vayan a la misma instancia de Vim, inicie Vim con la
--remote-silent
opción.fuente
:b
es un comando muy poderoso porque puede aceptar tanto números de búfer como nombres de búfer como argumentos. ¿Qué más? También admite la finalización de pestañas en cualquier parte del nombre de archivo. Por ejemplo, usted tiene foo.txt abierta en el tampón 2, puede escribir:b 2<Enter>
o:b foo.txt
o:b oo<Tab><Enter>
a editar ese archivo. Sí, el último completaría 'oo' a 'foo.txt' cuando presiona <Tab>.nnoremap gb :ls<cr>:b<space>
. Cuando escribogb
en modo comando, enumera mis búferes y tipos abiertos:b
, listos para comenzar a escribir un nombre / número de búfer.:b
aceptará una coincidencia de subcadena siempre que no sea ambigua. Así que si usted tiene archivos abiertosfoo
,bar
ybaz
, simplemente:b z
es suficiente para cambiar a labaz
memoria intermedia, y:b oo
ni:b o
le llevará a lafoo
memoria intermedia.para la lista de buffers abiertos
:bp
tampón anterior:bn
siguiente búfer:bn
(n
un número) mover al enésimo búfer:b <filename-part>
con tecla de tabulación que proporciona autocompletado (¡increíble!)En algunas versiones de vim,
bn
ybp
son en realidadbnext
ybprevious
respectivamente. El autocompletado de pestañas 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
El comando anterior guarda las configuraciones y los búferes de archivos abiertos actuales en
~/today.ses
. Puede cargar esa sesión usandoSin problemas para recordar dónde lo dejaste ayer. ;)
fuente
"
marca para saltar a donde estaba en el archivo la última vez.Para agregar a la
args
lista:Para eliminar de la
args
lista:En su ejemplo, podría usar
:argedit
test.pl para agregar test.pl a laargs
lista y editar el archivo en un solo paso.:help args
da mucho más detalles y uso avanzadofuente
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>
solo se abrirá en un nuevo búfer.fuente
Creo que puede estar usando el comando incorrecto para mirar la lista de archivos que ha abierto.
Intente hacer una
:ls
para ver la lista de archivos que ha abierto y verá:Luego puede rebotar a través de los archivos haciendo referencia a ellos por los números enumerados, por ejemplo: 3b
o puede dividir su pantalla ingresando el número pero usando sb en lugar de solo b.
Como un aparte% se refiere al archivo actualmente visible y # se refiere al archivo alternativo.
Puede alternar fácilmente entre estos dos archivos presionando Ctrl Shift 6
Editar: como
: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 parte del texto que eliminó anteriormente.fuente
Vim (¡pero no el Vi! Original) tiene pestañas que encuentro (en muchos contextos) superiores a los buffers. Puede decir
:tabe [filename]
que abra un archivo en una pestaña nueva. El ciclo entre pestañas se realiza haciendo clic en la pestaña o mediante las combinaciones de teclas [ n ]gt
ygT
. Vim gráfico incluso tiene pestañas gráficas.fuente
vim -p dir/*
. El tamaño máximo de la pestaña es 10, pero puede cambiarlo en la~/.vimrc
configuracióntabpagemax
a otro valor.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 que muchas personas usan) son ultra rápidos y geek.
EDITAR: Recientemente he estado usando dyng / ctrlsf.vim para buscar con vista contextual (como Sublime search) y cambié el motor de ag a ripgrep . El rendimiento es sobresaliente.
EDIT2: junto con CtrlSF , puede usar mg979 / vim-visual-multi , realizar cambios en varios archivos a la vez y, al final, guardarlos de una vez.
fuente
Cosas como
:e
y:badd
solo aceptarán UN argumento, por lo tanto, lo siguiente fallaráSi desea agregar varios archivos desde vim, use
arga[dd]
fuente
Algunas respuestas en este hilo sugieren usar pestañas y otras sugieren usar un búfer para lograr lo mismo. Las pestañas y los tampones son diferentes. Le sugiero que lea este artículo " Vim Tab Madness - Buffers vs Tabs ".
Aquí hay un buen resumen que extraje del artículo:
Resumen:
fuente
:help window
VimCuando uso múltiples archivos en vim, uso estos comandos principalmente (con ~ 350 archivos abiertos):
:b <partial filename><tab>
(saltar a un búfer):bw
(limpieza del búfer, eliminar un búfer):e <file path>
(editar, abrir un nuevo búfer>pltags
- habilitar saltos a definiciones de subrutinas / métodosfuente
:b <partial filename><tab>
plusset wildmenu
en tu.vimrc
trabajo bien para cuando tienes toneladas de buffers abiertos. Luego, solo coincide parcialmente y se desplaza por los que encuentra. En otros editores decentes, tiene hallazgos difusos, pero normalmente no puede restringir esos hallazgos difusos solo a los archivos que tiene abiertos.Agregar otra respuesta ya que esto no está cubierto por ninguna de las respuestas
Para cambiar todos los buffers para
tab
ver.abrirá todos los búferes a la vista de pestañas. Entonces podemos usar cualquier comando relacionado con pestañas
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 también se puede lograr al tener el siguiente comando automático en
~/.vimrc
De todas formas para responder a la pregunta: ¿Para añadir a la lista de arg:
arga file
,Para eliminar de la lista arg:
argd pattern
Mas en
:help arglist
fuente
Es posible que desee utilizar las marcas globales de Vim .
De esta manera, puede rebotar rápidamente entre archivos e incluso a la ubicación marcada en el archivo. Además, los comandos de teclado son cortos:
'C
me lleva al código con el que estoy trabajando,'T
me lleva a la prueba unitaria 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.fuente
Yo uso 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 facilitar el trabajo con ambos:
Esto cambia las asignaciones existentes para Hy L, pero hace que el cambio entre archivos sea extremadamente rápido y fácil. Solo presiona Hpara el siguiente y Lpara el anterior; ya sea que esté usando pestañas o buffers, obtendrá los resultados deseados.
fuente
Si va a utilizar múltiples buffers, creo que lo más importante es establecer ocultos para que le permita cambiar los buffers incluso si tiene cambios no guardados en el que está dejando.
fuente
Si usa solo los comandos integrados de vim , el mejor que he visto para cambiar entre múltiples buffers es este:
Combina perfectamente ambos
:ls
y:b
comandos: enumera todos los búferes abiertos y espera a que ingrese el comando para cambiar el búfer.Dado el mapeo anterior en vimrc, una vez que escribe
<Leader>f
,23
para ir al búfer 23,#
para ir al búfer alternativo / MRU,<Tab>
o<C-i>
para autocompletar,<CR>
o<Esc>
para permanecer en el búfer actualUna instantánea de la salida para la asignación de teclas anterior es:
En la instantánea anterior:
%a
para actual,h
para oculto,#
para anterior, vacío para no se ha cambiado a.+
para modificado.Además, sugiero encarecidamente
set hidden
. Ver:help 'hidden'
.fuente
:b
y:ls
mucho pero de forma independiente. Creo que esto se vuelve menos útil cuando tienes más de una página de buffers, pero aún así puedes recurrir a:b
nnoremap <leader>f :ls<cr>:b<space>
, que podría tener problemas con el comando 'más'set more
las cosas solo hacen la diferencia cuando hay muchos archivos abiertos (más de una página), por ejemplovim /usr/include/*
, aunque menos útiles entonces.Utilizo lo siguiente, esto le brinda muchas características que esperaría tener en otros editores como Sublime Text / Textmate
.vimrc
:let g:airline#extensions#tabline#enabled = 1
. Esto muestra automáticamente todos los búferes como encabezados de pestañas cuando no hay páginas de pestañas abiertasset wildmenu
en su.vimrc
continuación, cuando se escribe:b <file part>
+ Tabpara un buffer obtendrá una lista de posibles buffers que se puede usar / flechas derecha para desplazarse por la izquierda: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):cdo
los resultados para buscar y reemplazarfuente
Mi forma de trabajar eficazmente con múltiples archivos es usar tmux.
Le permite dividir ventanas vertical y horizontalmente, como en:
Lo tengo funcionando de esta manera en mis máquinas Mac y Linux y lo encuentro mejor que el mecanismo de cambio de panel de ventana nativo que se proporciona (en Mac). Encuentro el cambio 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 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 una ventaja para todos para la compatibilidad personal futura. Además de múltiples paneles tmux, también he intentado usar varias pestañas, por ejemplo, y varias ventanas nuevas, por ejemploy 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 anteriores
screen
no (aunque mac's iterm2 parece admitirlo, pero de nuevo, la configuración actual del directorio no funcionó para mí). tmux 1.8fuente
Uso la línea de comando y git mucho, así que tengo este alias en mi bashrc:
Esto abrirá cada nuevo archivo en una nueva pestaña en una ventana existente y creará una ventana para cada repositorio 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, uso estas asignaciones:
Para abrir varios archivos a la vez, debe combinar esto con una de las otras soluciones.
fuente
Yo uso múltiples buffers que están ocultos en mi
~/.vimrc
archivo.El script explorador mini-buffer también es bueno para obtener una buena lista compacta de sus buffers. Entonces
:b1
o:b2
... para ir al búfer apropiado o usar el explorador de mini-búfer y pasar por los búferes.fuente
intente seguir los mapas para editar con comodidad 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
fuente
Hice un video muy simple que muestra el flujo de trabajo que uso. Básicamente utilizo el complemento Ctrl-P Vim, y asigné la navegación del búfer a la tecla Intro.
De esta forma, 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 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 comienzas a tener muchos de ellos.
Dado que el complemento clasifica los búferes utilizando un pedido MRU, puede presionar Entrar 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:
Por supuesto, puede asignarlo a una clave diferente, pero creo que la asignación para ingresar es muy útil.
fuente
Sugeriría usar el complemento
Aquí está el enlace de github con instrucciones.
Nerdtree
Uso vim-plug como administrador de complementos, pero también puedes usar Vundle.
vim-plug
Vundle
fuente
En mi y otros muchos usuarios de vim, la mejor opción es,
Y luego simplemente Ctrl + 6 para cambiar al último búfer. O siempre puedes presionar
Y luego
<C-W><C-H/K/L/j>
para cambiar la división de trabajo.Por supuesto, puede editar cualquier archivo en cualquier cantidad de divisiones.
fuente
Cuando comencé a usar VIM no me di cuenta de que se suponía que las pestañas debían usarse como diferentes diseños de ventana, y el búfer cumple la función de edición / cambio de múltiples archivos entre sí. En realidad, al principio, las pestañas ni siquiera estaban 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 cambiar entre pestañas usando alt + números, ya que pensé usar comandos como : buffers,: bn y: bp fueron demasiado para mí. Cuando se lanzó VIM 7.0, encuentro que es más fácil administrar una gran cantidad de archivos y cambiarlo, pero recientemente me di cuenta de que los buffers siempre deberían ser el camino a seguir, a menos que sea una cosa: debe configurarlo para que funcione correctamente.
Así que probé vim-airline y habilité la barra de búfer visual similar a una 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 configuré shift + h / l como accesos directos, ya que los originales (mover a la cabeza / cola 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 es más fácil que: tabnew también. Encuentro: bd no es tan conveniente como: q aunque (MBE está teniendo algún problema), pero creo que puedo vivir con todos los archivos en el búfer.
fuente
si está en osx y desea poder hacer clic en sus pestañas, use MouseTerm y SIMBL (tomado de aquí ). Además, echa un vistazo a esta discusión relacionada .
fuente
La mayoría de las respuestas en este hilo están usando comandos vim simples, lo que por supuesto está bien, pero pensé que proporcionaría una respuesta extensa usando una combinación de complementos y funciones que encuentro particularmente útiles (al menos algunos de estos consejos provienen del archivo de Gary Bernhardt consejos de navegación ):
Para alternar entre los dos últimos archivos, simplemente presione
<leader>
dos veces. Recomiendo asignar<leader>
a la barra espaciadora:Para moverse rápidamente por un proyecto, la respuesta es una solución de coincidencia difusa como CtrlP . Lo ato
<leader>a
para un acceso rápido.En el caso de que quiera ver una representación visual de los búferes abiertos actualmente, uso el complemento BufExplorer . Simple pero efectivo.
Si quiero navegar por el sistema de archivos, usaría la línea de comando o una utilidad externa (Quicklsilver, Afred, etc.) pero para ver la estructura actual del proyecto, NERD Tree es un clásico. Sin embargo, no use esto
2
como el método principal de búsqueda de archivos. Realmente te retrasará. Yo uso el enlace<leader>ff
.Estos deberían ser suficientes para encontrar y abrir archivos. A partir de ahí, por supuesto, use divisiones horizontales y verticales. Con respecto a las divisiones, encuentro estas funciones particularmente útiles:
Abra nuevas divisiones en áreas más pequeñas cuando no haya suficiente espacio y amplíelos en la navegación. Consulte aquí para comentarios sobre lo que estos hacen exactamente:
Mover de división en división fácilmente:
fuente
Puede ser un loco absoluta y el alias
vim
avim -p
añadiendo en su.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.fuente