El equivalente más cercano ("más cercano", no "exacto") a ST2's Ctrl+ Pes un complemento llamado, prepárate ... CtrlP . Hay otros complementos similares como Command-T o FuzzyFinder .
Utilizo CtrlP y me encanta, pero apoyo incondicionalmente su decisión de ir "sin complementos". No es la forma más fácil de hacerlo, pero a la larga dará sus frutos.
Abrir archivos
La forma más básica de abrir un archivo es :e /path/to/filename
. Afortunadamente, obtienes finalización de tabulación y comodines: el clásico *
y uno especial **
, que significa "cualquier subdirectorio".
Combinando todo eso, puedes hacer:
:e **/*foo<Tab>
para elegir entre todos los archivos que contienen foo
su nombre en el directorio de trabajo o:
:e **/*foo/*bar<Tab>
para elegir entre todos los archivos que contienen bar
su nombre en cualquier subdirectorio que contenga foo
su nombre, en cualquier lugar del directorio de trabajo.
Por supuesto, que trabaja para :tabe[dit]
, :sp[lit]
y :vs[plit]
, también.
Sin embargo, esos comandos están limitados a un archivo. Úselo :next
para abrir varios archivos:
:next **/*.js
y échale un vistazo :help arglist
.
Saltando entre búferes
:b[uffer]
es el comando básico de conmutación de búfer:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Tenga en cuenta que muchos de estos comandos y sus familiares aceptan un recuento.
El :ls
comando le muestra una lista de búferes cargados. Sin embargo, es un poco "especial": a los búferes se les asigna un número cuando se crean para que pueda tener una lista que se parece a 1 2 5
si los borra. Esto es un poco incómodo, sí, y eso hace que cambiar a un búfer por su número sea demasiado problemático. Prefiere cambiar por nombre parcial :b foo<Tab>
o en bicicleta :bn :bp
.
De todos modos, aquí hay un mapeo genial que enumera todos los búferes cargados y llena el mensaje por usted, esperando que ingrese el número de un búfer y presione <enter>
:
nnoremap gb :ls<CR>:b<Space>
Con este mapeo, cambiar a otro búfer es tan simple como:
gb
(quickly scanning the list)
3<CR>
o:
gb
(quickly scanning the list)
foo<tab><CR>
La idea proviene de esta imagen tomada de la colección de infografías de Vim de Bairui :
Vim también tiene <C-^>
(o <C-6>
en algunos teclados) —el equivalente en modo normal :b#
de— para saltar entre el búfer actual y el anterior. Úselo si a menudo alterna entre dos búferes.
Lea todo sobre búferes en :help buffers
.
Ir a declaración
Dentro de un archivo, puede usar gd
o gD
.
Dentro de un proyecto, la función de "etiquetas" de Vim es su amiga, pero necesitará un indexador de código externo como ctags o cscope. Los comandos más básicos son :tag foo
y <C-]>
con el cursor sobre el nombre de un método. Ambas herramientas están bien integrados en Vim: ver :help tags
, :help ctags
y :help cscope
.
Por lo que vale, utilizo la navegación de etiquetas ampliamente para moverme dentro de un proyecto (usando CtrlP :CtrlPTag
y :CtrlPBufTag
comandos, principalmente, pero también los integrados) y mi método de cambio de búfer "genérico" favorito es el nombre.
Implementando tu configuración
Muchos usuarios de Vim ponen su configuración bajo control de versiones, lo que hace que sea muy rápido y fácil instalar su propia configuración en una nueva máquina. Piénsalo.
EDITAR
Hace unos meses, tuve que trabajar en una máquina remota con un Vim desactualizado. Podría haber instalado un Vim adecuado y clonar mi propia configuración querida, pero decidí viajar ligero, esta vez, para "afilar la sierra". Rápidamente construí un minimalista .vimrc
y revisé un par de características nativas medio olvidadas. Después de ese concierto, decidí que CtrlP no era tan necesario y me deshice de él: las funciones nativas y las asignaciones personalizadas no son tan atractivas, pero hacen el trabajo sin muchas dependencias.
Haciendo malabares con archivos
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
es un gran comando tan pronto como lo hagas set path
correctamente. Con mi configuración, ,ffoo<Tab>
encontrará todos los archivos que contienenfoo
en el directorio actual, de forma recursiva. Es rápido, intuitivo y ligero. Por supuesto, me beneficio de la misma finalización y comodines que con :edit
y amigos.
Para que el proceso sea aún más rápido, las siguientes asignaciones me permiten omitir partes enteras del proyecto y buscar archivos de forma recursiva en el directorio del archivo actual:
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
¡ADVERTENCIA! La path
opción es extremadamente poderosa. El valor anteriormente .,**
-Funciona para mí , pero los idiomas que utilizo no tienen una biblioteca estándar. El valor adecuado depende completamente de sus necesidades.
Haciendo malabares con los amortiguadores
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Las asignaciones anteriores enumeran los búferes disponibles en el "menú comodín" con un mensaje vacío, lo que me permite navegar por el menú <Tab>
o escribir algunas letras y, <Tab>
nuevamente, reducir la lista. Al igual que con las asignaciones de archivos anteriores, el proceso es rápido y casi sin fricciones.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Esas asignaciones hablan por sí solas.
Haciendo malabares con etiquetas
nnoremap <leader>j :tjump /
Este mapeo utiliza la búsqueda de expresiones regulares en lugar de la búsqueda de palabras completas, por lo que puedo hacer ,jba<Tab>
para encontrar la etiqueta foobarbaz()
.
Sí, la coincidencia difusa es adictiva, pero puede ser igual de productivo sin ella. Y por una fracción del costo.
MÁS EDITAR
Un par de consejos / trucos adicionales ...
Opciones de Wildmenu
El "wildmenu", habilitado con set wildmenu
, facilita la navegación de archivos / búfer. Su comportamiento se rige por un montón de opciones que vale la pena investigar:
wildmode
le dice a Vim cómo quieres que se comporte el "wildmenu":
set wildmode=list:full
wildignore
filtra todo el cruft:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecase
le permite buscar foo
y encontrar Foo
:
set wildignorecase
Marcas de archivo
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
Recientemente encontré esta joya en la de otra persona ~/.vimrc
. Crea una marca de archivo en la posición exacta del cursor cada vez que deja un búfer para que, dondequiera que esté, 'J
salte al último búfer de JavaScript que editó. Increíble.