tutorial salir modo guardar editar documento comando vim

salir - vim, cambiando entre archivos rápidamente usando vanim Vim(sin complementos)



vim guardar (6)

Entiendo que limitarme a Vim vainilla (sin usar complementos) limita el poder del editor, pero como cambio entre diferentes máquinas con frecuencia, a menudo es demasiado problema mover mi entorno por todas partes. Quiero quedarme en vainilla Vim.

Algo que me detiene es la capacidad de cambiar rápidamente de un archivo a otro. Yo (creo al menos) tengo una buena comprensión de los búferes , ventanas , pestañas , así como netrw ( Vex , Ex , etc.).

Pero en un editor como Sublime Text , puedo simplemente escribir ctrl - p y al instante estoy en el archivo.

Sé que puedo pasar al shell, pero me pregunto si hay otros secretos "ocultos" para cambiar rápidamente entre los archivos en Vim basados ​​en algo más que el nombre del archivo.


A veces también es útil ir secuencialmente a través de una lista de archivos (por ejemplo, si hiciste algo como vim *.php para 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).


El equivalente más cercano ("más cercano", no "exacto") a Ctrl + P de ST2 es un complemento llamado, prepárate ... vim.org/scripts/script.php?script_id=3736 . Hay otros complementos similares como Command-T o FuzzyFinder .

Uso CtrlP y me encanta, pero apoyo totalmente tu decisión de utilizar "sin complementos". No es la forma más fácil de ir, pero dará resultado a largo plazo.

Abrir archivos

La forma más básica de abrir un archivo es :e /path/to/filename . Afortunadamente, obtienes complementos 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 en su nombre bajo el directorio de trabajo o:

:e **/*foo/*bar<Tab>

para elegir entre todos los archivos que contienen la bar en su nombre bajo cualquier subdirectorio que contenga foo en su nombre, en cualquier parte bajo el directorio de trabajo.

Por supuesto, eso funciona para :tabe[dit] :sp[lit] y :vs[plit] , también.

Sin embargo, esos comandos están limitados a un archivo. Uso :next de abrir múltiples archivos:

:next **/*.js

y eche un vistazo a :help arglist .

Saltando entre buffers

: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 conteo.

El :ls muestra una lista de búferes cargados. Sin embargo, es un poco "especial": a los buffers se les asigna un número cuando se crean para que pueda tener una lista que se parece a 1 2 5 si elimina los búferes. 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 ciclismo :bn :bp .

De todos modos, aquí hay un buen mapeo que enumera todos los búferes cargados y rellena el mensaje para usted, esperando que escriba el número de un búfer y presione <enter> :

nnoremap gb :ls<CR>:b<Space>

Con este mapeo, cambiar a otro buffer 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 Vim de Bairui :

Vim también tiene <C-^> (o <C-6> en algunos teclados) -el modo normal equivalente de :b# -para saltar entre el buffer actual y el anterior. Úselo si a menudo alterna entre dos buffers.

Lea todo sobre los buffers en :help buffers .

Ir a la declaración

Dentro de un archivo, puede usar gd o gD .

Dentro de un proyecto, la función de "etiquetas" de Vim es su amigo, 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 un nombre de método. Ambas herramientas están bien integradas en Vim: ver :help tags :help ctags y :help cscope .

Por lo que vale, utilizo la navegación de etiquetas extensivamente para moverme dentro de un proyecto (usando los comandos de CtrlP :CtrlPTag y :CtrlPBufTag , en su mayoría, pero los que también lo hacen) y mi método de conmutación de buffer "genérico" favorito es por nombre.

Implementando su 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 máquina nueva. Piénsalo.

EDITAR

Hace unos meses, tuve que trabajar en una máquina remota con un Vim obsoleto. Pude haber instalado un Vim adecuado y clonado mi propia configuración querida, pero esta vez decidí viajar ligero para "afilar la sierra". Rápidamente construí un .vimrc minimalista y .vimrc 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 demasiadas dependencias.

Malabares con archivos

set path=.,** nnoremap <leader>f :find * nnoremap <leader>s :sfind * nnoremap <leader>v :vert sfind * nnoremap <leader>t :tabfind *

:find es realmente un gran comando tan pronto como set path correctamente. Con mi configuración ,ffoo<Tab> encontrará todos los archivos que contienen foo bajo el directorio actual, recursivamente. Es rápido, intuitivo y liviano. 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 completas del proyecto y buscar archivos recursivamente bajo 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 opción de path es extremadamente poderosa. El valor anterior- .,** -trabaja para mí, pero los idiomas que uso no tienen una biblioteca estándar. El valor adecuado depende completamente de sus necesidades.

Malabares con buffers

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 almacenamientos intermedios disponibles en "wildmenu" con un aviso vacío, lo que me permite navegar por el menú con <Tab> o escribir algunas letras y <Tab> nuevo para restringir la lista. Al igual que con las asignaciones de archivos anteriores, el proceso es rápido y casi sin fricción.

nnoremap <PageUp> :bprevious<CR> nnoremap <PageDown> :bnext<CR>

Esas asignaciones hablan por sí mismas.

Hacer malabares con las etiquetas

nnoremap <leader>j :tjump /

Esta asignación utiliza la búsqueda de ,jba<Tab> regulares en lugar de la búsqueda de palabras completas, así que puedo hacer ,jba<Tab> para encontrar la etiqueta foobarbaz() .

Sí, la combinación 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 / buffer. Su comportamiento se rige por un conjunto 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 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 el ~/.vimrc otra persona. Crea una marca de archivo en la posición exacta del cursor cada vez que deja un búfer para que, donde sea que esté, ''J salta al último búfer de JavaScript que ha editado. Increíble.


La respuesta depende mucho de tus preferencias y circunstancias. Algunos ejemplos:

  • Si se trata principalmente de dos archivos (por ejemplo, un encabezado C y un archivo de implementación), <C-^> es muy útil. En general, el archivo alternativo es un concepto importante.
  • Si utiliza una ventana grande de editor, window :split s convierte el problema de localizar un buffer en la ubicación de la ventana (una vez que tiene todos los buffers abiertos). Puede usar [N]<Cw><Cw> para cambiar rápidamente a él.
  • Si puede memorizar (unos pocos) números del buffer, los comandos :[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 remotamente archivos del servidor a través del plugin netrw que se envía con Vim.


Puede completar la ficha comodín en la línea de comandos sin ningún complemento. p.ej

:e src/**/foo*<tab>

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 por:

:b foo<tab>

que recorrerá todos los buffers con ''foo'' en el camino. Es posible que deba establecer las opciones de modo salvaje y comodín para obtener el comportamiento que desea. yo tengo

wildmode=longest:full wildmenu

en mi .vimrc.


Si desea cambiar entre los archivos en el editor vim, consulte la siguiente respuesta

Primero presione la Esc para salir del modo de edición.

Luego escriba :e para verificar la ruta actual del archivo.

si desea ir a otro archivo, escriba :e /path-of-file.txt/ con esto puede cambiar.

Si quiere ir al archivo anterior, simplemente escriba :e# que cambia a la ruta del archivo anterior.


Si tiene un nombre de archivo y quiere saltar a ese archivo, gf lo hará por usted. También me gusta usar ctags , que no es un complemento; usted acaba de construir las etiquetas y puede saltar fácilmente alrededor de su base de código.