vim edición / cambio entre múltiples archivos de manera eficiente en grandes estructuras de directorios

11

De ninguna manera soy un usuario avanzado de vim, apenas estoy comenzando a comprender los movimientos y comandos avanzados con vim. Pero hay un inconveniente que parece que no puedo evitar.

Crecí con programas gráficos para escribir código, pero recientemente comencé a usar vim sobre ssh y screen para trabajar en proyectos bastante grandes con muchas carpetas.

Tengo curiosidad por saber qué hacen los maestros de vim para trabajar con múltiples archivos de forma rápida y sencilla. Considere una aplicación de rieles como ejemplo. Digamos que quieres editar un controlador para que corras.

vim app/controllers/controller.rb

Pero luego desea cambiar rápidamente a editar una vista o una migración de db, mi primer instinto es :wqvolver a bash para navegar a ese directorio e iniciar vim nuevamente en un nuevo búfer.

Esto obviamente es completamente incorrecto.

He aprendido sobre varias cosas como:

  • El servidor de clientes (pero no quiero usar X sobre ssh y esta parece ser la única forma)
  • :eabrir otro archivo navegando, pero parece que no puedo hacerlo muy rápido. La pestaña completa realmente me hace tropezar.
  • Abrir un directorio completo y buscar a través de los buffers.
  • NERDTree es prometedor, pero realmente quiero alejarme de cualquier representación gráfica para seguir obligándome a dominar la navegación de línea de comando

Pido disculpas por ser ingenuo, pero realmente quiero aprender la forma correcta de hacerlo, incluso si es muy subjetivo.

¿Cuáles son sus métodos y qué recomendaría?

febs
fuente
Para Ruby on Rails en particular, el plugin rails.vim de Tim Pope tiene algunos comandos agradables (con finalización; extensible a nuevas jerarquías) para abrir archivos para modelos / vistas / controladores / migraciones / pruebas / ... (ver rails-type-navigationen la documentación , o :help rails-type-navigationcuando tenerlo instalado).
Chris Johnsen

Respuestas:

7

Es posible configurar vim para editar múltiples archivos sin tener que salir. Utiliza múltiples buffers y cambia entre ellos. Como está usando vim dentro de la pantalla, puede poner lo siguiente en su ~ / .vimrc para habilitarlo.

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

Esas asignaciones de teclas se asignan a las teclas de flecha Ctrl-Izquierda y Derecha para cambiar entre buffers. La tecla F4 invoca el mismo menú que mostraría la GUI. Al presionar la pestaña ahora también se muestra un pequeño menú para seleccionar la finalización cuando se presiona la pestaña.

Keith
fuente
Muy buen consejo, estas tres respuestas realmente me ayudaron a sentirme más cómodo. Una buena gestión del búfer sin complementos es una gran habilidad para tener. Me encanta el menú salvaje!
febs
5

Ja! Solía ​​ser exactamente como tú, así que sé exactamente de dónde vienes. Incluso ahora que sé lo que estoy haciendo hasta cierto punto (no soy un dios vim, pero espero llegar allí), ocasionalmente haré un: wq y volveré a mi caparazón.

Mira esto , esto podría ayudarte. (También me ayudará, ya que nunca supe sobre esto. Eso es lo asombroso de los sitios de stackexchange: ¡aprendes ayudando a otros a aprender!)

Aquí hay algunas cosas que hago.

  1. El :ecomando Desde el interior de vim, al editar un archivo, puede hacer algo como :e dir/subdir/otherfiley lo abrirá en un nuevo búfer, lo que significa que tendrá dos archivos abiertos a la vez.

  2. Ctrl-Shift-6(No sé los valores ascii reales). Si tiene dos buffers abiertos, puede alternar entre ellos en un instante con este conmutador.

  3. bd- Eliminar búfer. Le permite borrar un búfer.

  4. Esta es realmente muy útil :sh. Si tiene que volver a un shell por algún motivo (por ejemplo, para mirar un directorio y cambiar un archivo), puede invocar el comando de shell de vim, haga exactamente eso. Salir del shell te lleva de vuelta a donde estabas en vim.

  5. En la misma categoría que la anterior, escribir :!y un comando de Unix luego ejecutarán ese comando. Intenta esto con ls. (Creo que también funciona con conchas incorporadas, pero no estoy seguro).

Esos son los que uso todo el tiempo. También hay :npara el siguiente y :ppara el archivo anterior, ya que puede tener más de dos búferes abiertos en vim a la vez (aunque generalmente no hago esto).

almuerzo317
fuente
Impresionante gracias por esos consejos. También encontré esto: wincent.com/products/command-t . Estoy convencido de comenzar a usarlo. El único inconveniente es que necesitas rubí (no tan amigable con las cosas ssh), pero es exactamente lo que estaba buscando. Que combinan con :sh, :ey la gestión de memoria intermedia adecuada, y las cosas se ponen atractiva
FEB
En la mayoría de los shells (es decir, shells con control de trabajo) se Ctrl+Zdebe suspender el proceso ( fgdesde el shell para mostrarlo nuevamente), lo cual es una alternativa a :sh.
maxschlepzig
Otro gran consejo! ¡Excelente! Tendré que compilarlos en una publicación de blog o algo así.
febs
2

También recomendaría usar ventanas divididas para ver varios archivos a la vez. Agregue algunas habilidades con el manejo de Buffer y Window dentro de VIM, y será un ninja VIM en poco tiempo.

Para la documentación real, lo referiré a la Documentación de Windows de VIM , pero intentaré darle una ventaja aquí.

Inicie VIM con 2 (o más) ventanas divididas horizontalmente, la ventana superior tiene archivo1, la siguiente ventana abajo tiene archivo2, etc.

vim -o <file1> <file2> (file3 file4 ...)

Inicie VIM con 2 (o más) ventanas divididas verticalmente, la ventana más a la izquierda tiene archivo1, la siguiente ventana tiene archivo2, etc.

vim -O <file1> <file2> (file3 file4 ...)

Mueva el cursor a una ventana diferente:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

Ya estoy editando un archivo, pero también quiero dividir la ventana y editar un archivo diferente:

:split <file2>
:vsplit <file2>

Para división horizontal y vertical, respectivamente.

También hay comandos para mover ventanas, cambiar su tamaño, etc.

5mi11er
fuente
1

Use el comando vi: split para abrir una segunda ventana de edición. split puede hacer divisiones horizontales y verticales y más de dos a la vez. He tenido hasta 10 archivos abiertos en la misma sesión vi.

Wesmat
fuente