Hola, me llamo Osmandi y hoy te enseñaré a cómo personalizar VIM y programar con Go.
Sí, así como lo vez en la imagen 😉 Por cierto esas son mis notas del Curso de Algoritmos con C 😋 Recomiendo mucho ese curso.
Nota Yo uso ArchLinux, si usas otra distribución o sistema comparte en la caja de comentarios si tuviste que realizar algún ajuste.
En la ArchWiki encontré esta definición:
Vim (Vi IMProved), es un editor de texto derivado de Vi. Es notoriamente conocido por su empinada curva de aprendizaje, y su poco amistosa interfaz de usuario. No obstante, debido a su eficiencia, variedad de añadidos (“plugins”) y posibilidades de personalización, vim es uno de los editores de texto más populares entre programadores y usuarios de sistemas tipo Unix (junto con Emacs*). Existe también una versión gráfica, gVim, que proporciona un sistema de menús al usuario.
En este tutorial trabajaré solo con la versión de terminal, es decir VIM. En ArchLinux es bastante sencillo, solo basta con ingresar en la terminal:
sudo pacman -S vim
Si ingresamos vim
en nuestra terminal deberían entrar con normalidad al programa.
Como ya lo habrás notado, VIM es completamente por terminal y en ese sentido se maneja todo por comandos y teclas. Aquí en ningún momento usarás el mouse.
Si piensas que eso es una desventaja, piensa en todos los segundos que pierdes al alejar tu mano del teclado para tomar el mouse. Que si lo sumamos pueden llegar a ser una cantidad de tiempo considerable.
Una vez te aprendas los comandos, el usar VIM te será muy fácil y rápido.
Nota Estos comandos solo podrás ejecutarlo si estás en modo normal. Para escribir debes estar en modo insert.
Los básicos son los siguientes:
Tecla | Función |
---|---|
ESC | Entra en modo normal |
i | Entra en modo insert |
w | Desplazamiento una palabra a la derecha |
b | Desplazamiento una palabra a la izquierda |
H | Desplazamiento a la parte superior de la pantalla |
L | Desplazamiento a la parte inferior de la pantalla |
G | Nos lleva hasta el final del documento |
0 | Nos lleva hasta el inicio del documento |
I | Comienza a introducir el texto al inicio de la línea del cursor |
dd | Corta la línea actual (estará disponible en el portapapeles) |
D | Corta desde la posición actual del cursor hasta el final de la línea |
yy | Copia al completo la línea donde se encuentra el cursor |
P | Pega en la línea previa a la que nos encontremos el contenido del portapapeles |
p | Pega el la línea siguiente a la nos encontremos el contenido del portapapeles |
. | Repite el último comando (ideal cuando presionamos u por equivocación) |
u | Deshace el último comando |
U | Deshace el último comando aplicado a la línea donde se encuentre el cursor |
:/palabra | Busca la palabra en el documento |
n | Encuentra la siguiente palabra |
N | Encuentra la palabra anterior: |
:buffers | Muestra un listado de los ficheros abiertos en el momento de la solicitud y el estado en que se encuentran |
:w | Guarda los cambios del buffer |
:! comando | Ejecuta un comando bash. |
:wq | Guarda y sale de VIM |
:q | Sale de VIM |
:q! | Fuerza la salida de VIM sin guardar cambios |
Ahora, vamos con la personalización que es un poco más complejo. Debemos ingresar al archivo de configuración de vim de nuestro usuario:
vim ~/.vimrc
Debe contener lo siguiente:
set nocompatible
syntaxon
set nowrap
set encoding=utf8
"""" START Vundle Configuration
" Disable filetypefor vundle
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" Utility
Plugin 'scrooloose/nerdtree'
Plugin 'majutsushi/tagbar'
Plugin 'ervandew/supertab'
Plugin 'BufOnly.vim'
Plugin 'wesQ3/vim-windowswap'
Plugin 'SirVer/ultisnips'
Plugin 'junegunn/fzf'
Plugin 'godlygeek/tabular'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'benmills/vimux'
Plugin 'jeetsukumaran/vim-buffergator'
Plugin 'gilsondev/searchtasks.vim'
Plugin 'Shougo/neocomplete.vim'
Plugin 'tpope/vim-dispatch'
" Generic Programming Support
Plugin 'jakedouglas/exuberant-ctags'
Plugin 'honza/vim-snippets'
Plugin 'Townk/vim-autoclose'
Plugin 'tomtom/tcomment_vim'
Plugin 'tobyS/vmustache'
Plugin 'janko-m/vim-test'
Plugin 'maksimr/vim-jsbeautify'
Plugin 'vim-syntastic/syntastic'
Plugin 'neomake/neomake'
" Markdown / Writting
Plugin 'reedes/vim-pencil'
Plugin 'tpope/vim-markdown'
Plugin 'jtratner/vim-flavored-markdown'
Plugin 'LanguageTool'
" Git Support
Plugin 'kablamo/vim-git-log'
Plugin 'gregsexton/gitv'
Plugin 'tpope/vim-fugitive'
Plugin 'jaxbot/github-issues.vim'
" Theme / Interface
Plugin 'AnsiEsc.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'tomasr/molokai'
Plugin 'zenorocha/dracula-theme', {'rtp': 'vim/'}
Plugin 'mkarmona/colorsbox'
Plugin 'chriskempson/base16-vim'
Plugin 'AlessandroYorba/Sierra'
Plugin 'effkay/argonaut.vim'
Plugin 'atelierbram/Base2Tone-vim'
" Theme / Interface
Plugin 'ryanoasis/vim-devicons'
Plugin 'sjl/badwolf'
Plugin 'morhetz/gruvbox'
Plugin 'junegunn/limelight.vim'
Plugin 'romainl/Apprentice'
Plugin 'Lokaltog/vim-distinguished'
Plugin 'w0ng/vim-hybrid'
Plugin 'daylerees/colour-schemes'
Plugin 'ajh17/Spacegray.vim'
Plugin 'colepeters/spacemacs-theme.vim'
call vundle#end() " required
filetype plugin indent on " required
"""" END Vundle Configuration
"""""""""""""""""""""""""""""""""""""
" Configuration Section
"""""""""""""""""""""""""""""""""""""
" Show linenumbers
set number
set ruler
" Dictionary
set spell
set spelllang=es,en
" Set Proper Tabs
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab
" Always display the status lineset laststatus=2
" Enable Elite mode, No ARRRROWWS!!!!
let g:elite_mode=1
" Enable highlighting of the current lineset cursorline
" Theme and Styling
set t_Co=256
set background=dark
if (has("termguicolors"))
set termguicolors
endif
let base16colorspace=256 " Access colors present in 256 colorspace
colorscheme spacegray
" colorscheme spacemacs-theme
let g:spacegray_underline_search = 1
let g:spacegray_italicize_comments = 1
" Vim-Airline Configuration
let g:airline#extensions#tabline#enabled = 1
let g:airline_powerline_fonts = 1
let g:airline_theme='hybrid'
let g:hybrid_custom_term_colors = 1
let g:hybrid_reduced_contrast = 1
" Nerdtree
" Initialize with :NERDTree .
" Iniciar NerdTree al abrir VIM
autocmd vimenter * NERDTree
" Instrucciones básicas de NerdTree
" Abrir directorio del archivo :NERDTreeFind
" Abrir el directorio del terminal :NERDTree .
" Podemos ocultar la vista abol y quedarnos con el archivo actual con :NERDTreeToggle , si queremos revertir volvemos usar el mismo comando.
" Para intercambiar entre la vista lista o árbol y la vista del archivo se debe usar: ctrl-ww
" Con t abrimos un archivo dela vista lista en un nuevo tab, vim nos ubica en el archivo listo para poder editarlo. Podemos recorrer por todos los tabs hasta llegar a la vista lista con gt. Si usamo T abre el archivo en un nuevo tab con la diferencia que vim nos mantiene enfocados enla vista lista.
" También podemos abrir un archivo en una nueva ventana vertical con s, horizontal con i. Para intercambiar el enfoque del cursor entre las ventanas existentes (vista lista, ventana vertical de archivo 1, ventana vertical de archivo 2, etc) podemos usar: ctrl-ww (recorre todas las ventanas), ctrl-wh (toma la ventana izquierda), ctrl-wj (toma la venta de abajo), ctrl-wk (toma la ventana de arriba), ctrl-wl (toma la ventana derecha)
Guardamos con
:wq
Ahora para que se vea bien el Airline necesitamos tener instalado Powerline con:
sudo pacman -S powerline
Se debe agregar esa codificación al terminal para que vim lo reconozco. Yo uso Konsole así que no necesité hacer una configuración manual.
El siguiente paso es instalar vundle
mkdir ~/.vim/bundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Ingresamos en VIM (ignora los errores por los momentos) y allí colamos el comando :PluginList
para ver el listado de plugin en vim y luego :PluginInstall
para instalarlos.
Sal y entra nuevamente, esta vez deberías tener VIM como sale en la imagen de arriba.
Ahora te contaré un poco de algunas de los plugin que tienes:
<dl>
<dt>Vundle</dt>
<dd>Es un gestor de plugins para VIM. Es como decir npm para Javascript o pip para Python.</dd>
<dt>NERDTree</dt>
<dd>Para acceder de manera muy sencilla al directorio donde te encuentras desde VIM. Al final del documento .vimrc te dejé unas instrucciones que también encontrarás en las referencias.</dd>
<dt>MARKDOWN</dt>
<dd>Ayuda mucho a la escritura en MARKDOWN. Déjame decirte que lo usas cada vez que escribes un tutorial o haces una pregunta en Platzi.</dd>
<dt>GIT SUPPORT</dt>
<dd>Para que muestre en el airline la rama en la que te encuentras</dd>
<dt>AIRLINE</dt>
<dd>Es la barra inferior que tienes en tu VIM, tienes la rama donde estás, el idioma de tu corrector ortográfico, cantidad de palabras, el procentaje donde estás respecto a todo el documento.</dd>
</dl>
<h1>Plugin de VIM para usar Go</h1>Ahora que ya tenemos VIM listo, vamos a instalar el soporte para Go
Lo primero que debemos hacer es entrar en el fichero ~/.vimrc y agregar lo siguiente:
" Plugin Go
Plugin 'fatih/vim-go'" Importación automática al guardar en go" format with goimports instead of gofmtletg:go_fmt_command = "goimports"" Correr para quese importe todas las librerías necesarias":GoImports
Guardamos y salimos con :wq
. En una terminal insertamos lo siguiente:
git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go
Ingresa en VIM y coloca :PluginInstall vim.go
y :PluginInstall
Sal y vuelve a entrar a VIM, aquí ya tienes tu VIM instalado como en la imagen y listo para codear en Go.
<h1>Beneficios de condear Go en VIM</h1>Hay unos comandos interesantes que puedes ejecutar estando en VIM y sin salirte, entre ellos
<dl>
<dt>:GoBuild</dt>
<dd>Para compilar</dd>
<dt>:GoImports</dt>
<dd>Importa las librerías que necesites, aunque con la configuración que hicimos arriba, debería importar con solo guardar</dd>
<dt>:GoTest</dt>
<dd>Hace un test para verificar que todo el código esté bien</dd>
<dt>:GoRun .</dt>
<dd>Corre el codigo go</dd>
</dl>
Recuerda dejarme tus comentarios. Y si tienes experiencia usando VIM me gustaría que la compartieras.
Saludos y muchas gracias 😄
Excelente información, era lo que andaba buscando en Platzi, ya que hace falta un buen curso de como manejar VIM.
Hola tengo problemas para instalar los plugins, no sé si es la forma como lo estoy haciendo, pues cree el archivo oculto .vimrc con toda la información que contiene la muestra de esta clase, después de guardar y salir, instalar el powerline en Ubuntu, luego cree la carpeta mkdir ~/.vim/bundle, la cloné de git
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Finalmente ingreso al editor vim, y estando en modo normal tecleo :PluginList y luego PluginInstall, pero cuando ingreso estos dos comandos me saca error E492: Not an editor command: PluginList
Ya supe que era lo que pasaba, luego de descargar la aplicación hay que actualizar el gestor de paquetes de linux apt, para que reconozca el paquete instalado con el comando:
sudo apt update
luego de esto si se ingresa a vim y se ingresa :PluginList donde nos muestra toda la lista de Plugins y luego le damos PluginInstall y ya empieza a instalar todos lo plugins.