tutorial texto salir pegar insertar guardar español editar curso copiar vim editor navigation

texto - vim linux



Navegación de archivos Vim (15)

Creo que me iría mejor con las pestañas con las que puedo alternar fácilmente, pero tal vez necesite usar un flujo de trabajo diferente.

¿Conoces las pestañas de Vim? No estoy seguro de si se estaba refiriendo a las pestañas de Vim allí, o de las de TextMate. No está claro qué versión de Vim estás usando, pero tiene pestañas desde al menos 7.0 (que parece que está instalada en todos lados últimamente) y son geniales.

:tabe abre una nueva (abreviatura de "tab edit", por ejemplo :tabe for empty o :tabe path/to/file para abrir un archivo en una nueva pestaña), puede moverse entre las pestañas adyacentes con gt / gT , y también hay otros comandos de navegación relacionados con pestañas, como podría esperar de Vim ( :help tabs )

Mi flujo de trabajo para proyectos grandes tiende a involucrar un grupo de pestañas, cada una con entre 1 y 3 ventanas, dependiendo del tipo de contexto que necesito. Esto funciona aún mejor si tengo una ventana de terminal de doble ancho ya que puedo dividir verticalmente con :vs , entonces una sola pestaña puede mostrarme fácilmente 4 archivos a la vez con suficiente espacio para cada uno.

Consejo final: a veces utilizo el comando "cambiar buffer" ( :sb <partial_buf_name> ) que es bastante parecido al hallazgo difuso de TM, ya que funciona bastante bien pero solo para buffers ya abiertos. Todavía es genial para cuando tengo una docena o más archivos abiertos a la vez. (Nota: necesitaba :set switchbuf=usetab en mi vimrc para que funcione en las pestañas, pero una vez configurado, es genial).

Me estoy esforzando mucho para aprender vim después de usar TextMate en los últimos años.

Empecé a enviar parte de la navegación en el archivo a la memoria, pero estoy luchando con la navegación entre varios archivos.

En mi flujo de trabajo, es bastante común que esté pasando entre un puñado de archivos con bastante regularidad (suficientes archivos como para que las ventanas del panel dividido se vuelvan demasiado pequeñas).

En este momento estoy usando NERDTree, pero me resulta engorroso buscar en los directorios, así como utilizar CTRL + W h / CTRL + W l constantemente para avanzar y retroceder.

Creo que me iría mejor con las pestañas con las que puedo alternar fácilmente, pero quizás deba usar un flujo de trabajo diferente.

También me gustaría un atajo de "Ir a archivo ..." como CMD + T en TextMate. He encontrado fuzzy_file_finder pero requiere que vim se fuzzy_file_finder con enlaces de Ruby, que no es el caso de las instalaciones nativas en las que he trabajado.

Si bien podría reconstruir la razón principal por la que quiero cambiar a vim es para que pueda tener un entorno de editor que sé que funcionará fácilmente en cualquier plataforma.

¡Las opciones que hay son abrumadoras, cualquier idea es muy apreciada!



Además de las respuestas wildmenu , BufExplorer plugin BufExplorer y las siguientes asignaciones para saltar rápidamente los buffers:

nmap <A-1> :b 1<CR> nmap <A-2> :b 2<CR> nmap <A-3> :b 3<CR> ... nmap <A-0> :b 10<CR> nmap <A-=> /bs

O simplemente puede reemplazar el explorador de búfer por el :ls , que básicamente muestra lo mismo.

El último mapea el Alt-= para mostrar el explorador de buffer.

No uso tanto Windows, ya que generalmente solo tengo una o dos ventanas.

También modifiqué la statusline de statusline para incluir el número del buffer %2n , de modo que siempre sé qué buffer se está editando. Ver :h statusline


Aquí hay algo bastante trivial que .vimrc en mi .vimrc . Cargará un archivo desde cualquier subdirectorio.

" load from an unspecified subdirectory function! LoadFromSubdirectory(filespec) let filename = glob("`find . -name ''" . a:filespec . "'' -print`") exe '':e ''.filename endfunction :command -nargs=1 Er :call LoadFromSubdirectory(<f-args>)

Entonces puedo decir:

: Er Main.java

y buscará subdirectorios, buscar Main.java y cargarlo. No se comporta bien para múltiples archivos del mismo nombre, pero es rápido y simple.

La otra herramienta que uso es VTreeExplorer , que proporciona una ventana de archivos / directorios basada en un árbol, y no requiere ninguna opción de compilación especial de VIM (es decir, es un complemento de vanilla).


Encuentro a LustyExplorer el mejor hasta ahora.

Puede abrir un archivo escribiendo solo una parte de su nombre.

Puede abrir un archivo desde el directorio del archivo actual, o el pwd actual, o desde la lista de almacenamiento intermedio.

Si abre un archivo desde la lista de búfer, no tiene que navegar por el árbol de directorios, aunque desafortunadamente para los otros dos modos, todavía tiene que navegar por el árbol. Lo bueno es que no tienes que empezar desde el primer personaje.

Si usted tiene:

dir_a/ ... dir_b/ file.js file.html

y desea abrir dir_b/file.html generalmente puede encontrarlo escribiendo b<Tab>h


Es sorprendente ver que :find comando :find no se ha mencionado en ninguna de las respuestas. Normalmente trabajo en proyectos de rieles donde necesito profundizar en la jerarquía de directorios. Entonces, para un archivo application.css , ubicado en la app/assets/stylesheets/ all tengo que escribir es :find applica y luego presionar tab para autocompletar e ingresar para abrir.


Mi flujo de trabajo para encontrar archivos es wildmenu, autocwd y :e .

Partes relevantes en el .vimrc :

set wildmenu set wildignore=*.dll,*.o,*.pyc,*.bak,*.exe,*.jpg,*.jpeg,*.png,*.gif set wildmode=list:full set autochdir let g:netrw_list_hide=''^/.,./(pyc/|pyo/|o/)$''

Y cómo usarlo:

:e myf^D

Eso da todos los archivos en el directorio actual que comienzan con myf. También puede <Tab> través de ellos. Use return para abrir :)

^D siempre le dará todos los partidos. Como autocmd siempre va a la carpeta del archivo actual, es fácil trabajar con él. Si estás en foo/bar.py y quieres ir a foo/baz.py , solo lo haces :e baz.py y estás allí. Eso también funciona con buffers ( :b foo^D enumera todos los buffers comenzando con foo)


Mira el plugin ctrlp como una alternativa al plugin Command-T . Es mejor que esto, ya que es una secuencia de comandos Vim ''nativa'' y no necesita que Vim se compile con ruby ​​(u otro soporte) mientras se ejecuta muy rápido y sin obstrucciones.



No encuentro la perforación en los subdirectorios a través de simple :e es engorroso dada una configuración decente para completar la pestaña.

Mire en la opción ''wildmenu'' para que Vim muestre una lista de terminaciones (nombres de archivo) en la línea de modele sobre la línea de comando. Puede cambiar la opción ''wildmode'' para configurar aún más el tipo de completación de pestañas que hará Vim.

Personalmente utilizo :set wildmode=full .

Mi flujo de trabajo es así:

  1. :cd en el directorio de mi proyecto.
  2. Para abrir el archivo foo/bar/baz :

    • Escenario más simple: escriba :e f<tab>b<tab>b<tab><enter> .

    • Si hay más de un archivo que comienza con b en uno de esos directorios, es posible que tenga que hacer <left> o <right> u otra <tab> en el teclado para saltar entre ellos (o escribir algunas letras más para desambiguar) .

    • En el peor de los casos, hay archivos y directorios que comparten un nombre y necesita profundizar en el directorio. En este caso, pestaña: complete el nombre del directorio y luego escriba *<tab> para desglosar.

  3. Abra 2 o 3 ventanas y abra archivos en todas ellas según sea necesario.
  4. Una vez que un archivo se abre en un búfer, no elimine el búfer. Déjalo abierto en segundo plano cuando abras archivos nuevos. Solo :e un nuevo archivo en la misma ventana.
  5. Luego, use :b <tab> para recorrer los búferes que ya están abiertos en el fondo. Si escribe :b foo<tab> solo coincidirá con los archivos actualmente abiertos que coincidan con foo .

También utilizo estas asignaciones para que sea más fácil abrir ventanas nuevas y saltar entre ellas porque es algo que hago tan a menudo.

" Window movements; I do this often enough to warrant using up M-arrows on this" nnoremap <M-Right> <C-W><Right> nnoremap <M-Left> <C-W><Left> nnoremap <M-Up> <C-W><Up> nnoremap <M-Down> <C-W><Down> " Open window below instead of above" nnoremap <C-W>N :let sb=&sb<BAR>set sb<BAR>new<BAR>let &sb=sb<CR> " Vertical equivalent of C-w-n and C-w-N" nnoremap <C-w>v :vnew<CR> nnoremap <C-w>V :let spr=&spr<BAR>set nospr<BAR>vnew<BAR>let &spr=spr<CR> " I open new windows to warrant using up C-M-arrows on this" nmap <C-M-Up> <C-w>n nmap <C-M-Down> <C-w>N nmap <C-M-Right> <C-w>v nmap <C-M-Left> <C-w>V

Me lleva unos segundos abrir Vim, configurar algunas ventanas y abrir algunos archivos en ellas. Personalmente, nunca he encontrado que ninguno de los scripts de exploración de archivos de terceros sea muy útil.


Si aún no los ha encontrado, le recomendamos que consulte:

  • el plugin original buscador difuso - que IIRC no tiene los problemas de Ruby vinculante
  • el plugin Project - similar a NERDTree
  • el plugin de buffer explorer - muestra una lista de búferes abiertos

También tenga en cuenta que puede reasignar accesos directos clave en su .vimrc para que sean menos engorrosos. Uso ventanas divididas mucho; He encontrado lo siguiente que hace que lidiar con ellos sea mucho más fácil:

" set your own personal modifier key to something handy let mapleader = "," " use ,v to make a new vertical split, ,s for horiz, ,x to close a split noremap <leader>v <c-w>v<c-w>l noremap <leader>s <c-w>s<c-w>j noremap <leader>x <c-w>c " use ctrl-h/j/k/l to switch between splits map <c-j> <c-w>j map <c-k> <c-w>k map <c-l> <c-w>l map <c-h> <c-w>h


Si el archivo que desea ya está cargado en un búfer (lo cual es probable si está pasando de un puñado de archivos regularmente), puede cambiar rápidamente al búfer con el comando :b[uffer] .

:b puede tomar un número de búfer como parámetro, o (más útil) una cadena que coincida con parte de la ruta / nombre de archivo. Si hay varias coincidencias, puede usar la pestaña para recorrerlas.

Si desea dividir la ventana y abrir el búfer en la nueva ventana, utilice :sb name

Si desea abrir el búfer en una nueva pestaña, utilice :tab b name

También puede usar el :ls para ver una lista de los búferes cargados actualmente.


Una manera fácil de explorar el sistema de archivos es el comando:

:Sex

No estoy inventando esto :)


Utilizo esta función para encontrar archivos en subdirectorios, aunque no lo escribí. Es de la wiki de vim :

function! Find(name) let l:list=system("find . -name ''".a:name."'' | grep -v /".svn//" | perl -ne ''print /"$.//t$_/"''") let l:num=strlen(substitute(l:list, "[^/n]", "", "g")) if l:num 0 echo "Not a number" return endif if l:inputl:num echo "Out of range" return endif let l:line=matchstr("/n".l:list, "/n".l:input."/t[^/n]*") else let l:line=l:list endif let l:line=substitute(l:line, "^[^/t]*/t./", "", "") execute ":e ".l:line endfunction command! -nargs=1 Find :call Find("")

Una cosa que me gusta es que tiene soporte para comodines (*). También se comporta bien para múltiples partidos.


:Sex ,: Vex,: :Tex y :Ex son todos comandos útiles para ex (picar) los archivos en su sistema si desea usar algo diferente de :e

(donde S/V/T son las abreviaturas de Split / Vertical / Tab)