GNU/Linux >> Tutoriales Linux >  >> Linux

Vanilla Vim es divertido

Cuando inicias Vim con --clean opción, aparece en modo "vainilla". Sin complementos, sin configuración, solo de vuelta a las raíces. He recopilado un montón de declaraciones de configuración a lo largo de los años, algunas de ellas datan de MS-DOS o Windows 3.1. Este es el trato:comenzaré desde cero para encontrar una buena configuración de punto de partida con solo los complementos disponibles en Fedora 35. ¿Sobreviviré una semana de codificación? ¡Lo averiguaré!

Estas son las reglas:declaraciones de configuración mínimas posibles y solo complementos que se envían con Fedora 35+. Por cierto, si no eres usuario de Fedora, sigue leyendo. Siempre puede instalar estos complementos desde el administrador de paquetes de su sistema operativo manualmente o usando un administrador de complementos Vim.

Antes de comenzar, está el elefante en la habitación:pregunta sobre Vim o Neovim (tenedor de Vim). Bueno, esto depende de ti. Todo lo que está en este artículo debería funcionar para ambos. Sin embargo, solo probé con Vim. Todas las habilidades serán útiles cuando inicie sesión en un servidor donde solo vi está disponible. Puede ser un sistema UNIX antiguo, un servidor Linux con un mínimo de software instalado para mayor seguridad, un shell interactivo en un contenedor o un sistema integrado donde el espacio es precioso.

Sin más preámbulos, aquí está lo que destilé al mínimo absoluto para ser efectivo con Vim para la codificación:

# dnf install --allowerasing vim-default-editor \
        vim-enhanced \
        vim-ctrlp \
        vim-airline \
        vim-trailing-whitespace \
        vim-fugitive \
        vim-ale \
        ctags

No te preocupes por el --allowerasing opción. Simplemente revise la transacción de instalación antes de confirmar. Esta opción está ahí para decirle al administrador de paquetes que reemplace el paquete existente nano-default-editor con vim-default-editor . Es un paquete pequeño que suelta archivos de configuración de shell para establecer la variable de entorno EDITOR en vim , y esto es imprescindible si desea utilizar Vim (por ejemplo, con git). Esto es algo especial para Fedora. No necesitará hacer esto en otras distribuciones o sistemas operativos, solo asegúrese de que su variable de shell EDITOR esté configurada correctamente.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Resumen

Una descripción general rápida de lo que considero un conjunto de complementos bueno y limpio:

  • CtrlP :el complemento de búsqueda difusa más pequeño posible (vimscript puro)
  • Fugitivo :Una herramienta imprescindible para git
  • Espacio en blanco al final :muestra y corrige, bueno, espacios en blanco al final
  • Aerolínea :Una línea de estado mejorada (vimscript puro)
  • Cerveza :resalta los errores tipográficos o de sintaxis a medida que escribe
  • Etiquetas :No es un complemento de Vim, sino una herramienta muy necesaria

Hay otros complementos de búsqueda difusa como command-t o mi favorito (muy rápido) fzf.vim . La cosa es, fzf.vim no está en Fedora, y quiero la configuración más pequeña posible. CtrlP funcionará bien, y es mucho más fácil de configurar ya que no requiere nada.

Si tuviera que elegir una configuración mínima absoluta sería:

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

Pero eso probablemente sea demasiado extremo, así que aquí hay una configuración un poco más grande con mi explicación detallada a continuación:

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

Uso de una coma para la clave principal

Me gusta tener mi clave líder asignada a una coma en lugar de la barra invertida predeterminada. Es la tecla libre más cercana en Vim cuando tus manos están en posición de escritura. Además, esta tecla es la misma en la mayoría de las distribuciones de teclado, mientras que \ varía según el modelo o diseño. Rara vez uso un líder local, pero el subrayado parece una buena opción.

Lectura adicional:

  • Ver :help map-which-keys en el Manual de referencia de Vim
  • Vea las claves no utilizadas en Vim en Vim Tips Wiki

Tipo de archivo y sintaxis desactivados

El siguiente es el muy importante filetype dominio. Mira, Vim viene con "baterías incluidas", la versión 8.2 contiene resaltado de sintaxis para 644 idiomas, 251 definiciones de tipo de archivo (ftplugins ), y reglas de sangría para 138 idiomas. Sin embargo, la sangría no está habilitada de forma predeterminada, tal vez para brindar una experiencia de edición uniforme para todos. Me gusta habilitarlo.

Un consejo rápido:si está editando un archivo muy grande y Vim se siente lento, es posible que desee desactivar el resaltado de sintaxis para acelerar las cosas. Solo el tipo :syn off comando.

Lectura adicional:

  • Ver :help filetype en el Manual de referencia de Vim
  • Ver :help syntax en el Manual de referencia de Vim
  • Ver :help indent en el Manual de referencia de Vim

Complemento Matchit

Vim incluso viene con algunos complementos adicionales, lo que hace que algunas características sean incompatibles, una de ellas es bastante útil. Es el matchit plugin que hace % clave para encontrar elementos primarios coincidentes para trabajar con algunos idiomas. Por lo general, puede encontrar el principio o el final de un bloque (comienzo y final) o etiquetas de coincidencia HTML y similares.

Lectura adicional:

  • Ver :help matchit en el Manual de referencia de Vim

Intercambiar archivo

Una de las muchas configuraciones que quiero mantener de mi configuración anterior es usar /tmp para intercambiar y crear copias de seguridad en un directorio separado en mi hogar, que debe crear con mkdir ~/.vimbackup . Es importante comprender que Vim crea una copia llamada "archivo de intercambio" cuando comienza a editar, y todo el trabajo no guardado se guarda en este archivo. Entonces, incluso si hay un corte de energía, su intercambio contiene la mayor parte del trabajo no guardado. Prefiero usar tmpfs ya que todas mis computadoras portátiles y servidores están protegidos con UPS, y ahorro a menudo. Además, la mayoría de las veces, usa archivos de intercambio cuando se pierde su conexión SSH en lugar de debido a un corte de energía. Los archivos de intercambio pueden ser bastante grandes para archivos grandes y valoro mi SSD, así que tomaré la decisión aquí. Si no está seguro, elimine esta declaración para usar /var/tmp , que es más seguro.

Lectura adicional:

  • Ver :help swap-file en el Manual de referencia de Vim

Complemento de búsqueda difusa

Ahora, el buscador difuso es un complemento sin el que no puedo vivir. Abrir archivos usando comandos como :Ex o :e o :tabe está bien en un servidor cuando necesita abrir como 20 archivos al día. Cuando codifico, normalmente necesito abrir cientos de ellos. Como dije, CtrlP hace el trabajo muy bien. Es pequeño, sin dependencias:puro Vim. Se abre con Ctrl +P combinación, que es un poco raro para mí. Sé que algunos editores famosos lo usan (VSCode, creo). La cuestión es que estas ya son combinaciones de teclas importantes de Vim que no quiero anular. Así que el ganador para mí es líder +líder (coma presionada dos veces).

El ctrlp_user_command simplemente cambia la forma en que CtrlP obtiene la lista de archivos. En lugar del listado de archivos recursivo incorporado (glob), usa git ls-files que suele ser mejor ya que ignora cosas de .gitignore , entonces cosas como node_modules u otros directorios irrelevantes que pueden ralentizar la lista no interfieren.

Líder +B /T /F /P /M para abrir una lista de búferes, etiquetas, etiquetas del archivo actual, búfer de reparación rápida y archivos usados ​​más recientemente es muy útil. Específicamente, una vez que generó una taglist con ctags , esto es esencialmente "Ir a la definición" para cientos de lenguajes de programación, ¡no se necesitan complementos! Todo esto está integrado en Vim. Ahora, para aclarar las cosas, cuando escribo líder +B , significa presionar coma y luego presionar B clave, no junto con Control o Cambio .

Lectura adicional:

  • Ver :help Explore en el Manual de referencia de Vim
  • Ver ctrlp.vim GitHub

Gestión de búfer

Aunque Vim admite pestañas en estos días, la gestión del búfer es una habilidad importante para dominar Vim. Normalmente termino con demasiados búferes y necesito hacer :bdelete demasiado a menudo. Bueno, líder +D parece una buena opción para hacerlo más rápido. También me gusta cerrar la ventana Quickfix, para que esté el líder +W combinación para eso también. Lo uso muy a menudo cuando navego por los resultados de búsqueda.

Lectura adicional:

  • Ver :help buffer-hidden en el Manual de referencia de Vim

Ggrep y el complemento fugitivo

Hablando de buscar, es tan importante como abrir archivos. Quiero poder grep la base de código. Para eso, existe el increíble :Ggrep comando del complemento fugitivo, que usa git grep, que ignora los archivos basura y solo busca lo que hay en git. Desde Turno +K es una clave gratuita en Vim, es ideal para agrupar automáticamente el término debajo del cursor. Y finalmente, poder ingresar patrones de búsqueda arbitrarios usando leader +G también es agradable Tenga en cuenta que esto abre una ventana llamada ventana Quickfix donde puede navegar por los resultados, ir a la siguiente ocurrencia, anterior, última, primera y más. La misma ventana se usa para la salida de compiladores u otras herramientas, así que familiarícese con ella. Sugiero leer más en la documentación si esto es nuevo para usted.

Lectura adicional:

  • Ver :help quickfix en el Manual de referencia de Vim
  • Vea el GitHub vim-fugitivo

Búsqueda y grepping con fugitivo

Por cierto, buscando con / key es inteligente y sensible, lo que significa que si todos los caracteres están en minúsculas, Vim busca ignorando mayúsculas y minúsculas. De forma predeterminada, resalta los resultados y creo que escribí :noh (giro de resaltado) alrededor de un millón de veces. Por eso tengo líder +S para alternar esto. También sugiero leer más sobre la búsqueda en el manual más adelante.

La búsqueda y el grepping son los siguientes. El complemento fugitivo lo tiene cubierto. Usa el comando :Ggrep pattern para hacer un git grep, y los resultados aparecerán en la ventana Quickfix. Luego, simplemente navegue por los resultados usando los comandos de solución rápida (:cn , :cp , y tal) o simplemente use :CtrlPQuickfix (o líder +P ) para desplazarlos visualmente. Lo bueno de la integración de solución rápida de CtrlP es que puede buscar más en los resultados escribiendo para que coincidan con los nombres de archivo o el contenido si tiene sentido:buscar en los resultados de búsqueda.

Lectura adicional:

  • Ver :help grep en el Manual de referencia de Vim
  • Ver :help noh en el Manual de referencia de Vim
  • Vea el GitHub vim-fugitivo

Etiquetas

Líder +C para generar un ctags El archivo para una mejor navegación es útil cuando se trata de una nueva base de código o se realiza una sesión de codificación más larga con muchos saltos. Ctags admite cientos de idiomas y Vim puede usar todo este conocimiento para navegar. Más sobre cómo configurarlo más adelante. Tenga en cuenta que ya he hablado de líder +T para abrir la búsqueda aproximada de todas las etiquetas, ¿recuerdas? Es lo mismo.

Lectura adicional:

  • Ver :help ctags en el Manual de referencia de Vim
  • Consulte el sitio web de Universal Ctags

Mapeo de teclas

Poder anular cualquier otra configuración en los proyectos creando un .vimrc archivo en un directorio de proyecto es una buena idea. Simplemente póngalo en el (global) .gitignore para asegurarse de que no necesita editar miles de archivos git ignore en cada proyecto. Tal proyecto .vimrc podría ser algo como (para proyecto C/C++ con GNU Makefile):

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

Como puede ver, normalmente mapeo F2 -F10 claves para compilar, ejecutar, probar y acciones similares. Usando F9 para llamar a make suena bien. ¿Recuerdas el IDE azul de Borland de MS-DOS?

Como se mencionó anteriormente, es una buena idea ignorar tanto .vimrc y tags (generado por ctags ) globalmente, por lo que no es necesario actualizar cada .gitignore :

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

Algunas declaraciones más en mi configuración personal solo son relevantes para aquellos con diseños de teclado que no son de EE. UU. (Estoy en checo). Necesito usar teclas muertas para muchos caracteres, y simplemente no es posible, y prefiero escribir el comando en lugar de hacer esas combinaciones difíciles de alcanzar. Aquí hay una solución al problema:

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

Lectura adicional:

  • Ver :help map en el Manual de referencia de Vim

Las teclas de función son todas gratuitas en Vim, excepto F1 , que está destinado a ayudar. No necesito ayuda, no es que ya sepa todo sobre Vim. De nada. Pero simplemente puedo escribir :help si es necesario. Y F1 es una tecla crucial, tan cerca del Esc llave. Me gusta usar el intercambio de búfer (:b# ) para eso y F2 -F3 para siguiente/anterior. Cuanto más trabaje con búferes, más lo necesitará. Si no ha utilizado Ctrl +^ , sugiero acostumbrarse. Oh, ¿has ingresado alguna vez al modo Ex con el tipo feo :visual? ? Muchos principiantes no tenían idea de cómo salir de Vim de ese modo. Para mí, es simplemente perturbador ya que rara vez lo uso.

Ahora, familiarizándose con ctags es clave para tener éxito con Vim. Esta herramienta es compatible con cientos de idiomas y puede crear fácilmente etiquetas para archivos que no desea crear, por lo tanto, sugiero ignorar los típicos directorios basura:

# cat ~/.ctags.d/local.ctags
--recurse=yes
--exclude=.git
--exclude=build/
--exclude=.svn
--exclude=vendor/*
--exclude=node_modules/*
--exclude=public/webpack/*
--exclude=db/*
--exclude=log/*
--exclude=test/*
--exclude=tests/*
--exclude=\*.min.\*
--exclude=\*.swp
--exclude=\*.bak
--exclude=\*.pyc
--exclude=\*.class
--exclude=\*.cache

Complemento de aerolínea

No debo olvidarme del complemento de la aerolínea Vim. De los dos en Fedora, este es liviano, no se necesitan dependencias externas y funciona de inmediato con todas mis fuentes. Puedes personalizarlo, y hay temas y esas cosas. Simplemente me gusta la configuración predeterminada.

Debo mencionar que hay dos principales ctag proyectos:Exuberant Ctags y Universal Ctags. Este último es un tenedor más moderno. Si su distribución lo tiene, utilícelo. Si tiene Fedora 35+, debe saber que ahora está en Universal Ctags.

Resumir

Como termino, esto es lo que sugiero. Trate de mantener su configuración de Vim impecable y limpia. Se pagará en el futuro. Después de cambiar, tuve que volver a aprender los comandos "escribir y salir" porque lo estaba escribiendo como :Wq accidentalmente todo el tiempo, y tuve un "truco" en la configuración anterior que realmente hizo lo que quise decir. De acuerdo, este podría ser realmente útil y hacer el corte. Espero que entiendas lo que quiero decir:

:command Wq wq
:command WQ wq

Aquí hay un último consejo rápido:es posible que deba cambiar mucho su configuración predeterminada de Vim mientras encuentra el punto óptimo de lo que le presenté aquí y su propio gusto. Utilice el siguiente alias, para que no tenga que buscar en el historial todo el tiempo. Confía en mí, cuando un usuario de Vim busca "vim" en el historial, nada es relevante:

alias vim-vimrc='vim ~/.vimrc'

Ahí tienes. Tal vez esto pueda ayudarlo a navegar por el rico mundo de Vim sin una tonelada de complementos. Vainilla ¡Vim es divertido!

Para probar lo que acaba de leer, instale los paquetes y consulte la configuración:

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

Un agradecimiento especial a Marc Deop y Melanie Corr por revisar este artículo.


Actualización: ¡He sobrevivido! La única dificultad que tuve fue el orden diferente de los resultados del complemento CtrlP. El algoritmo difuso para archivos es diferente del fzf.vim complemento, por lo que los archivos que solía encontrar usando varios términos de búsqueda no funcionan ahora. Terminé instalando el paquete fzf de Fedora, que viene con una función vim FZF que se puede vincular a la combinación principal para una búsqueda de archivos más relevante. Ver el archivo de configuración actualizado en mi repositorio de GitHub. He aprendido mucho en el camino. Hay combinación de teclas que ya he olvidado gracias a muchos complementos.


Este artículo apareció originalmente en el sitio web del autor y se vuelve a publicar con permiso.


Linux
  1. Vim Latex:¿Deshabilitar Quickfix?

  2. ¿No puedes instalar Vim?

  3. Ubuntu 19.04:Configurar vim

  4. Centos 7:Configurar vim

  5. Vim atascado en el modo de inserción

Cómo eliminar líneas en Vim / Vi

Cómo buscar en Vim / Vi

Conceptos básicos del editor Vim

Cómo usar Ansible para configurar Vim

Editor VIM

Habilitar resaltado de sintaxis en Vim