Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto Vi, presente en todos los sistemas UNIX.
Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha experimentado muchas mejoras. La principal característica tanto de Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para realizar ciertas operaciones, lo que los diferencia de la mayoría de editores comunes, que tienen un solo modo en el que se introducen las órdenes mediante combinaciones de teclas o interfaces gráficas.
*Gracias wikipedia [https://es.wikipedia.org/wiki/Vim](https://es.wikipedia.org/wiki/Vim)*
## Archivo de configuración
El archvio se llama `.vimrc` y lo podremos encontrar én distintos path según distro. En ubuntu:
```
/etc/vim/vimrc
```
En RHEL y derivadas:
```
/etc/vimrc
```
Veremos algo así:
![](vimrc.png)
*Documentación oficial de vimrc: http://vimdoc.sourceforge.net/htmldoc/usr_05.html*
Algunos parámetros ejemplo para vimrc:
- Mostrar con colores los ficheros:
```
systax on
```
- El siguiente bucle consigue que cuando vuelvas a abrir un archivo este el cursor en el mismo sitio que cuando lo cerraste.
```
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
```
- Para la compatibilidad de los colores de vim con una terminal oscura se utiliza la siguiente opción.
```
set background=dark
```
## Archivo .viminfo
Para utilizar Viminfo, primero necesita tener la funcionalidad +viminfo disponible (:version). Viminfo almacena:
- El historial de la línea de comando
- El historial de búsqueda de cadenas de texto
- El historial de línea de entrada
- El contenido de los registros no vacíos
- Las marcas de diversos archivos
- El archivo de marcas, apuntando a la ubicación en los archivos
- El último patrón de búsqueda/sustitución (para 'n' y '&').
- La lista de *buffer
- Las variables globales
En general, las sesiones almacenan los atributos "externos" y Viminfo los atributos "internos".
## The Ultimate vimrc --> [Repo](https://github.com/amix/vimrc)
Hay dos versiones:
- La Básica: Si quieres algo pequeño simplemente copia basic.vim en tu ~/.vimrc y tendrás una buena configuración básica
- La impresionante: Incluye una tonelada de plugins útiles, esquemas de color y configuraciones
### Plugins incluidos con vim
Leer la documentación de estos plugins es imprescindible para entenderlos mejor. Cada plugin proporciona una experiencia de Vim mucho mejor.
* [ack.vim](https://github.com/mileszs/ack.vim): Plugin de Vim para `the_silver_searcher` (ag) o ack -- un grep endiabladamente rápido
* [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Cambia rápida y fácilmente entre buffers. Este plugin se puede abrir con `<leader+o>`.
* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Buscador de archivos, buffers, mru y etiquetas difusas. Está mapeado con `<Ctrl+F>`.
* [goyo.vim](https://github.com/junegunn/goyo.vim): Escritura sin distracciones en Vim.
* [vim-zenroom2](https://github.com/amix/vim-zenroom2): Emula el entorno de iA Writer cuando se editan archivos Markdown, reStructuredText o de texto.
* [lightline.vim](https://github.com/itchyny/lightline.vim): Una línea de statusline/tabline ligera y configurable para Vim
* [NERD Tree](https://github.com/preservim/nerdtree): Un plugin explorador de árboles para vim
* [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Abrir el archivo bajo el cursor al pulsar `gf`.
* [pathogen.vim](https://github.com/tpope/vim-pathogen): Gestiona tu ruta de ejecución de vim
* [snipmate.vim](https://github.com/garbas/vim-snipmate): snipmate.vim pretende ser un script vim conciso que implementa algunas de las características de los snippets de TextMate en Vim
* [ale](https://github.com/dense-analysis/ale): Comprobación de sintaxis y lint para vim (ALE requiere NeoVim >= 0.2.0 o Vim 8 con +timers +job +channel)
* [vim-commentary](https://github.com/tpope/vim-commentary): Comentar cosas. Usa `gcc` para comentar una línea (toma una cuenta), `gc` para comentar el objetivo de un movimiento. `gcu` descomenta un conjunto de líneas adyacentes comentadas.
* [vim-expand-region](https://github.com/terryma/vim-expand-region): Permite seleccionar visualmente regiones de texto cada vez más grandes utilizando la misma combinación de teclas
* [vim-fugitive](https://github.com/tpope/vim-fugitive): Una envoltura de Git tan impresionante que debería ser ilegal
* [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object): Define un nuevo objeto de texto que representa líneas de código en el mismo nivel de sangría. Útil para scripts python/vim
* [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors): Selecciones múltiples al estilo de Sublime Text para Vim, CTRL+N se reasigna a CTRL+S (debido a YankRing)
* [vim-yankstack](https://github.com/maxbrunsfeld/vim-yankstack): Mantiene un historial de yanks anteriores, cambios y borrados
* [vim-zenroom2](https://github.com/amix/vim-zenroom2) Elimina todo el desorden y se centra sólo en lo esencial. Similar a iA Writer o Write Room
* [gist-vim](https://github.com/mattn/gist-vim) Crea fácilmente gists desde Vim usando el comando `:Gist`.
* [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Es un plugin para mostrar visualmente los niveles de sangría en Vim
* [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig ayuda a mantener estilos de codificación consistentes para múltiples desarrolladores trabajando en el mismo proyecto a través de varios editores e IDEs.
### Esquemas de color incluidos
* [peaksea](https://github.com/vim-scripts/peaksea): Por defecto