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!
¿Conoces la aplicación MacVim? Es VIM pulido para OS X, y una de sus características es compatible con pestañas (CMD + T para abrir una nueva pestaña), tiene un cajón, etc. ... (lea esto: http://zerokspot.com/weblog/2008/08/03/macvim-as-textmate-replacement/ )
¡Intentalo!
Saludos Michal
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)
NerdTree es mejor para la navegación de archivos en vim.
El siguiente enlace es una buena introducción a nerdtree.
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í:
-
:cd
en el directorio de mi proyecto. 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.
- Abra 2 o 3 ventanas y abra archivos en todas ellas según sea necesario.
- 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. - 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 confoo
.
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)