Usando Vim for Go Development

Como programador, pasas mucho tiempo usando editores de texto, IDE, etc. para codificar. Por lo tanto, es importante qué y cómo lo usas. Recientemente me mudé a Vim for Go development y me encanta. Inicialmente, estaba usando VSCode con extensión Go y después de eso, usé GoLand por un tiempo. Visual Studio Code y GoLand son totalmente increíbles, también me encantó usarlos. Definitivamente toma algún tiempo aprender usando vim, pero vale la pena el aprendizaje. Depende totalmente de ti lo que funcione mejor para ti. No use vim solo porque otros lo estén usando. Soy un principiante en vim y las cosas que voy a explicar en esto es lo que aprendí después de comenzar a usarlo. Estaría muy contento si eres un usuario de Vim desde hace mucho tiempo y tienes algunos buenos consejos/sugerencias. Puedes ponerlos en la sección de comentarios de este post. Si eres un principiante, pondré algunos buenos recursos para aprender vim al final de esta publicación.

NOTA: Este artículo se publicó originalmente en https://jogendra.dev.

¿Por qué la gente usa Vim?

  • Se garantiza que Vim existe en todos los sistemas Unix (básicamente, está disponible en todas las plataformas principales). Está en todas partes, y es lo mismo en todas las plataformas. Vim es compatible con todos los formatos de archivo y lenguajes de programación, sin necesidad de descargar diferentes IDE para diferentes lenguajes de programación.
  • Navegación sin ratón. Tus dedos rara vez tienen que salir de la fila de inicio, lo que significa que podrás editar el texto muy, muy rápidamente. Puede hacer el mapeo de claves de acuerdo a su conveniencia. No tener que cambiar entre el teclado y el ratón es definitivamente bueno con Vim.
  • Vim es muy ligero y rápido. Vim puede manejar fácilmente archivos grandes, pero Visual Studio u otro IDE no pudo manejarlos sin problemas. Intente abrir un archivo grande (~20 MB) con su editor de texto no vim favorito y vim, definitivamente conocerá la diferencia. Hay un gran poder en la forma en que Vim maneja archivos (búferes), divisiones (ventanas) y diseños (pestañas), el poder que no puede obtener en otros editores.
  • Los editores de texto Vim y similares a vim (emacs, nano, etc.) se sienten y se ven tan nativos, sin distracciones. No tengo que cambiar entre el terminal y el editor/IDE. Es simplemente todo en un solo lugar. Es bastante fácil ser productivo en vim con poco esfuerzo.
  • Vim es muy útil cuando tiene que realizar cambios de configuración rápidos u otros cambios en la máquina/servidor remoto. Incluso en su propia máquina, no abrirá un editor de texto pesado por un pequeño cambio.
  • Vim es altamente configurable. Simplemente puede usar ~/.vimrc para anular las configuraciones predeterminadas y personalizar las suyas. Los complementos de Vim proporcionan todo lo que necesita a vim en un editor de texto. Autocompletar, resaltado de sintaxis o cualquier otra función que le nombre y esté disponible, solo necesita el complemento adecuado.
  • Usar vim es divertido. Es un poco difícil de usar inicialmente, pero se vuelve divertido una vez que te acostumbras.

¡Vamos!

En esta publicación, exploraremos la configuración de Vim como un IDE completo para el desarrollo de Go. Los complementos que vamos a usar son:

  • vim-go: Complemento de desarrollo Go para Vim. Tiene todo lo que necesita para el desarrollo de Go.
  • NERDTree-Explorador de sistemas de archivos para Vim. Le permite explorar visualmente jerarquías de directorios complejas, abrir rápidamente archivos para leer o editar y realizar operaciones básicas del sistema de archivos.

🔌 Vim-Go

Vim-Go es el complemento vim más popular y utilizado para el desarrollo de Go. Ofrece casi todas las funciones que pueda necesitar. Algunos de ellos son:

  • Compilar el paquete con :GoBuild, instale con o prueba con :GoTest.
  • Ejecute rápidamente sus archivos actuales con :GoRun.
  • Resaltado de sintaxis y plegado.
  • Soporte de autocompletado a través de gopls.
  • Ejecutar gofmt y goimports al guardar. Significa que no tiene que preocuparse por importar paquetes y formatear el código, vim-go lo hará por usted al guardar el archivo.
  • Vaya a símbolo / declaración con :GoDef y busque la documentación con :GoDoc o :GoDocBrowser.
  • Compruebe la cobertura del código, haga linting de código, etc.

Puede consultar todas las funciones ofrecidas por vim-go aquí.

Instalar vim-go

Vim 8 agregó soporte nativo para paquetes, lo que significa que puede cargar complementos simplemente clonando su contenido en su directorio ~/.vim. Para instalar vim-go, simplemente puede ejecutar el comando:

git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
Entrar en el modo de pantalla completa Salir del modo de pantalla completa

También necesitará instalar todos los binarios necesarios. vim-go facilita la instalación de todos ellos al proporcionar un comando, :GoInstallBinaries, que go get todos los binarios requeridos.

O puede poner el complemento en su ~/.vimrc.

call plug#begin()Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }call plug#end()
Entrar en el modo de pantalla completa Salir del modo de pantalla completa

Ahora guarde .vimrc e instale el complemento ejecutando vim +PlugInstall. Instalará el plugin vim-go con todos los binarios necesarios.

He agregado las siguientes directivas relacionadas con vim-go a mi .vimrc, para que sea más útil:

Puedes visitar tutoriales oficiales para tus propias personalizaciones. Las documentaciones completas de vim-go están disponibles en su editor de vim, simplemente puede ejecutar :help vim-go para comprobarlas. Así es como mi vim busca un programa Go después de instalar y configurar vim-go:

¿Hermosa?

Autocompletado

Es muy difícil codificar sin autocompletado y sin poder ir a la definición. Vim-go puede usar gopls para completar, etc. La finalización está habilitada de forma predeterminada a través de omnifunc. Mientras esté en modo INSERT, puede activar la finalización con Ctrl-x Ctrl-p. Si se encuentran nombres coincidentes, se abre un menú emergente que se puede navegar usando las teclas Ctrl-n y Ctrl-p.
Para comprobar si el ftplugin/go.vim de vim-go se ha configurado correctamente para el autocompletado, puede ejecutar:

:verbose setlocal omnifunc?
Entrar en el modo de pantalla completa Salir del modo de pantalla completa

Debería aparecer el mensaje de abajo:

Si desea que el mensaje de autocompletar aparezca automáticamente cada vez que presione el punto (.), puede agregar la siguiente línea a su .vimrc:

au filetype go inoremap <buffer> . .<C-x><C-o>
Entrar en el modo de pantalla completa Salir del modo de pantalla completa

Ahora, escribir debería ofrecer sugerencias automáticas junto con vistas previas de la documentación. Debería verse algo como esto:

Aparte de la finalización de vim-go, hay algunos buenos complementos que puede usar para la finalización automática y otras características de LSP. Algunos de ellos son:

  • coc.nvim (Conquista de la finalización): Motor Intellisense para Vim8 & Neovim, soporte de protocolo de servidor de idioma completo como código VSC.
  • LanguageClient-neovim: Cliente de protocolo de servidor de idiomas mínimo escrito en Rust.
  • YouCompleteMe: Motor de finalización de código. Tiene varios motores de terminación.

Protocolo de servidor de idiomas (LSP) y gopls

El Protocolo de servidor de idiomas se utiliza entre una herramienta (el cliente) y un proveedor de inteligencia de idiomas (el servidor) para integrar características como autocompletar, ir a definición, buscar todas las referencias y similares en la herramienta. El objetivo del protocolo es permitir que el soporte del lenguaje de programación se implemente y distribuya independientemente de cualquier editor o IDE dado. El protocolo Language Server fue desarrollado originalmente para el código Visual Studio de Microsoft y ahora es un estándar abierto. Microsoft colaboró con Red Hat y Codenvy para estandarizar la especificación del protocolo.

Antes de LSP, solía haber diferentes IDE para diferentes idiomas (todavía hay muchos). Cada IDE tenía integración específica del lenguaje (resaltado de sintaxis, autocompletado, ir a definición, etc.). La situación a menudo se conoce como un problema M × N, donde el número de integraciones es el producto de M editores y N lenguajes. Lo que hace el Protocolo de Servidor de idiomas es cambiar este problema M × N por un problema M + N. Lo mejor de LSP es que es totalmente independiente de los IDE. Como resultado, podemos ver que Visual Studio funciona para muchos idiomas diferentes a través de extensiones. Estas extensiones hacen uso de LSP.

Puede leer más sobre LSP aquí y ella o ver este video de YouTube para ver cómo funciona.

El servidor de idioma oficial de Golang es gopls (pronunciado: «vete, por favor»). Puede consultar más información sobre el estado de gopls y sus funciones compatibles.

NER NERDTree

Después de configurar muchas cosas en su Vim, una cosa que probablemente aún le falta es la «Ventana Lateral» donde puede navegar por los archivos de su proyecto fácilmente. NERDTree te llevó allí. NERDTree es un explorador de sistema de archivos completo, que ayuda a navegar visualmente por sus archivos utilizando una ventana lateral de estilo árbol. Con NERDTree, puede abrir archivos rápidamente para leer o editar, y realizar operaciones básicas del sistema de archivos.

Instalación y configuraciones

Puede instalar NERDTree igual que vim-go y coc.nvim. Simplemente agregue Plug 'preservim/nerdtree' a .vimrc y ejecute :PlugInstall o ejecute vim +PlugInstall desde la línea de comandos.

Además, puede consultar las preguntas frecuentes de la wiki para las configuraciones. Mis configuraciones para NERDTree son similares a:

Puede abrir un directorio en vim usando vim . (similar a code . para VSCode). Puedes cambiar entre NERDTree y tu código usando CTRL+ww o CTRL+w+ArrowKey. NERDTree tiene documentación incorporada, puede comprobarla pulsando ? cuando esté en la ventana de NERDTree.

Así es como se ve mi configuración de Vim con NERDTree:

Puedes echar un vistazo a mis scripts .vimrc y vim en GitHub en jogendra/dotfiles/vim.

Aquí hay algunos enlaces que le ayudarán a comenzar con Vim:

  • OpenVim-Tutoriales interactivos de Vim
  • Los mejores consejos de Vim de Fandom
  • ¿Por qué, oh POR QUÉ, usan vi esos cabezudos?
  • Colección de artículos de Vim de thoughtbot
  • spf13-vim – La distribución de Vim definitiva
  • Cheatsheet de Vim
  • Vim Tab Madness. Buffers vs Tabs

Simplemente puede ejecutar vimtutor en su línea de comandos ejecutando vimtutor comando. Abrirá tutoriales de Vim y lo ayudará a comenzar con él.

Líneas de fondo

Usar vim es divertido. Inicialmente, puede enfrentar algún problema al usarlo y puede que tenga que aprender a usarlo, pero definitivamente vale la pena aprenderlo. Al menos puedes seguir aprendiendo vim junto con el uso de un IDE. Comience con el mínimo y construya un poco sobre él cada día. Hay muchos complementos disponibles para todo lo que necesitas con Vim. Usar vim para el desarrollo de Golang es súper agradable con el complemento vim-go. ¿No es agradable tener todo en un solo lugar y ser más productivo?

Gracias por leer. Comparta con sus colegas/amigos. Puedes contactarme en Twitter.



+