Entiendo que limitarme a Vanilla Vim (no usar complementos) limita el poder del editor, pero como cambio entre diferentes máquinas con frecuencia, a menudo es demasiado problema mover mi entorno a todas partes. Solo quiero quedarme en Vanilla Vim.
Algo que me frena es la capacidad de cambiar rápidamente entre archivos. I (creer al menos) tienen una buena comprensión de los tampones , ventanas , pestañas , así como netrw ( Vex
, Ex
, etc.).
Pero en un editor como Sublime Text , puedo simplemente escribir ctrl, py al instante estoy en el archivo.
Sé que puedo bajar al shell, pero me pregunto si hay otros secretos "ocultos" para cambiar rápidamente entre archivos en Vim basados en algo más que el nombre del archivo.
Respuestas:
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:
para elegir entre todos los archivos que contienen
foo
su nombre en el directorio de trabajo o:para elegir entre todos los archivos que contienen
bar
su nombre en cualquier subdirectorio que contengafoo
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:y échale un vistazo
:help arglist
.Saltando entre búferes
:b[uffer]
es el comando básico de conmutación de búfer: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 a1 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>
:Con este mapeo, cambiar a otro búfer es tan simple como:
o:
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
ogD
.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
:find
es un gran comando tan pronto como lo hagasset 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:
¡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
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.Esas asignaciones hablan por sí solas.
Haciendo malabares con etiquetas
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 etiquetafoobarbaz()
.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":wildignore
filtra todo el cruft:wildignorecase
le permite buscarfoo
y encontrarFoo
:Marcas de archivo
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.fuente
:e
pero lo usaré mucho a partir de ahora. Me maravilla el trabajo que llegó a Ctrl-P y puedo aprender mucho de él, pero no funcionó para mí. Descubrí que era un poco lento y, como tal, interrumpía mi línea de pensamiento mientras trabajaba (podría ser mi sistema, mi configuración, yo mismo, pero no investigué)**
es genial, de hecho.gb
mapa. Otro que usaré mucho. Todos los complementos de búfer que he probado (CtrlP, bufExplorer, ...) no son tan rápidos como este (concedido, ofrecen más funcionalidad pero no lo suficiente como para seguir usándolos) .La respuesta depende mucho de tus preferencias y circunstancias. Algunos ejemplos:
<C-^>
es muy útil. En general, el archivo alternativo es un concepto importante.:split
evitan que el problema de localizar un búfer no ubique la ventana (una vez que haya abierto todos los búferes). Puedes usar[N]<C-w><C-w>
para cambiar rápidamente a él.:[N]b[uffer]
y:[N]sb[uffer]
son bastante útiles;:ls
te dice los números.Los complementos (o al menos las asignaciones personalizadas) pueden mejorar mucho las cosas, y hay una gran variedad sobre este tema en vim.org . Existen varios mecanismos para distribuir su configuración (Pathogen + GitHub, Dropbox, ...), o puede editar de forma remota los archivos del servidor a través del complemento netrw que viene con Vim.
fuente
mA
para almacenar la marcaA
y `` `` A``` para regresar. Encuentro a netrw mucho más útil después de enterarme de:Rex
cuál regresa al explorador.:b
,:e
y muchos otros pueden utilizar comodines como*
y**
. El:b
comando puede tomar un nombre de archivo parcial. Combine eso con<c-d>
o el menú salvaje y puede llegar bastante lejos. En cuanto a los complementos, puede usar algo específico de dominio como rail.vim que proporciona comandos de navegación específicos de rieles o algo más general como CtrlP.A veces también es útil recorrer secuencialmente una lista de archivos (por ejemplo, si hizo algo como
vim *.php
abrir varios archivos a la vez). Luego, puede usar:n[ext]
(así como:prev[ious]
,:fir[st]
y:la[st]
) para la navegación (además de lo que se sugirió en las otras respuestas).fuente
Puede completar la pestaña comodín en la línea de comando sin ningún complemento. p.ej
le permitirá recorrer todos los archivos que comienzan con 'foo' en el árbol de directorios bajo ./src y seleccionar el que desea editar.
Si ya ha editado el archivo y todavía está en un búfer, puede cambiarlo con:
que recorrerá todos los búferes con 'foo' en la ruta. Es posible que deba configurar las opciones wildmode y wildmenu para obtener el comportamiento que desea. yo tengo
en mi .vimrc.
fuente
Si está en un nombre de archivo y desea saltar a ese archivo,
gf
lo hará por usted. También me gusta usar ctags , que no es un complemento; simplemente crea las etiquetas y puede saltar fácilmente por su código base.fuente
Si desea cambiar entre archivos en el editor vim, consulte la respuesta a continuación
Primero presione la
Esc
tecla para salir del modo de edición.Luego escriba
:e
para verificar la ruta del archivo actual.si desea ir a otro archivo, escriba
:e /path-of-file.txt/
usando este, puede cambiar.Si desea ir al archivo anterior, simplemente escriba
:e#
el cambio a la ruta del archivo anterior.fuente
Tuve el mismo problema con Vim.
Lo último que quiero es depender de complementos para una tarea tan mundana como el cambio de archivos.
Agregué las siguientes líneas a
.vimrc
¡Y BAM! Ahora puedo
:find any/filename/in/any/folder/
siempre que vim esté en el directorio raíz del proyecto. La finalización de pestañas funciona. ¡Los comodines funcionan!Una vez que los archivos ya están abiertos, y hay un montón de búferes en segundo plano (puede usarlos
:ls
para ver todos los búferes), la ejecución realizará:b any/file <TAB>
una búsqueda aproximada de todos los búferes y saltará al archivo requerido. En caso de que no sea único, habrá un menú comodín de pestañas (de ahí la segunda línea en .vimrc) que se puede seleccionar usando la pestaña.Mi respuesta proviene de este increíble video
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Hay más trucos y recomiendo verlo.
fuente