Vim (editor de texto)

**Vim** ( ; vi improved, mellorado) é un programa de editor de texto gratuíto e de código aberto, baseado en pantalla. É un clon mellorado de vi de Bill Joy. O autor de Vim, Bram Moolenaar, derivou Vim dun *port* do editor Stevie para Amiga e lanzou unha versión ó público en 1991. Vim está deseñado para usarse tanto desde unha interface de liña de comandos como unha aplicación independente nunha interface gráfica de usuario. Dende o seu lanzamento para o Amiga, o desenvolvemento multiplataforma fixo que estivese dispoñible en moitos outros sistemas. En 2018, foi votado como o editor máis popular entre os lectores de Linux Journal; en 2015, a enquisa de desenvolvedores de Stack Overflow descubriu que era o terceiro editor de texto máis popular, e en 2019, a quinta contorna de desenvolvemento máis popular.

## Historia 
O antecedente de Vim, Stevie (ST Editor for VI Enthusiasts), foi creado por Tim Thompson para o Atari ST en 1987 e posteriormente desenvolvido por Tony Andrews e G.R. (Fred) Walter. Foi un dos primeiros clones de Vi en popularizarse, e non empregaba o código fonte de Vi. O código fonte de Vi utilizaba o editor de texto Ed desenvolvido baixo AT&T, e por iso Vi só puido ser usado por quen tiña unha licenza de código fonte de AT&T. Basear Vim no código fonte de Stevie significou que o programa podía ser distribuído sen requirir a licenza de código fonte de AT&T.

Baseando o seu traballo en Stevie, Bram Moolenaar empezou a traballar en Vim para o ordenador Amiga en 1988, coa primeira versión pública (Vim v1.14) en 1991. 

No momento da súa primeira versión pública, o nome "Vim" era un acrónimo de "Vi IMitation", pero isto cambiou a "Vi IMproved" a finais de 1993.

### Historia de versións 
## Licenza 
Vim publícase baixo a licenza Vim, que inclúe algunhas cláusulas de charityware que animan aos usuarios que gozan do software a considerar doar a nenos en Uganda. A licenza Vim é compatible coa Licenza Pública Xeral de GNU mediante unha cláusula especial que permite a distribución de copias modificadas baixo a GNU GPL versión 2.0 ou posterior.

Vim ten un tutorial integrado para principiantes chamado **vimtutor**, que normalmente instálase xunto con Vim, pero é un executábel separado e pódese correr cun comando de shell. O Manual de Usuarios de Vim detalla as funcionalidades de Vim e pódese ler desde dentro de Vim ou consultar en liña.

Vim tamén ten unha función de axuda integrada (usando o comando `:help`) que permite aos usuarios consultar e navegar a través dos comandos e características.

### Rexistros 
Vim ten varias entradas de memoria especiais chamadas **rexistros** (non confundir coas rexistros de hardware ou do procesador). Ao cortar, eliminar, copiar ou pegar texto, o usuario pode optar por gardar o texto manipulado nun rexistro. Hai 36 rexistros de propósito xeral asociados a letras e números ([a-z0-9]) e unha serie de rexistros especiais que ou ben conteñen valores especiais (o nome do ficheiro actual, o último comando, etc.) ou teñen un propósito específico.

### Modos 
miniatura|Modos de Vim
Como vi, vim admite múltiples modos de edición. Dependendo do modo, os caracteres escritos son interpretados como secuencias de comandos ou son inseridos como texto. En Vim hai 14 modos de edición, 7 modos básicos e 7 variantes:

* Modo **normal** — usado para comandos do editor. Xeralmente é o modo por defecto e, por defecto, premer **ESC** devolve o editor a este modo.
* Modo de **inserción** — usado para escribir texto dun xeito similar á maioría dos editores modernos. Neste modo, o texto aberto nos búferes pódese modificar co texto introducido desde o teclado. 
* Modo **visual** — usado para seleccionar áreas de texto. Pódense executar comandos sobre a área seleccionada — mover, editar, filtrar mediante comandos internos ou externos, etc.
** **Visual por liñas**, un subtipo do modo visual que selecciona unha ou varias liñas enteiras.
** **Visual por bloques**, outro subtipo que selecciona un bloque rectangular de texto que abarca unha ou varias liñas.
* Modo de **selección** — semellante ao visual, pero os comandos non se interpretan; o texto resaltado substitúese directamente polo que se teclea.
* Modo de **liña de comandos** (Cmdline) — proporciona unha única liña de entrada na parte inferior da xanela de Vim. Os comandos (que comezan con `:`) e algunhas outras teclas para accións específicas (incluíndo a procura por patrón e o comando filter) activan este modo. Ao completar o comando, Vim retorna ao modo previo. 
* Modo **Ex** — acepta unha secuencia de comandos.
* Modo **Terminal-Job** — interacción cun proceso nunha xanela de terminal.

## Personalización 
Vim é altamente configurable e extensible, o que o converte nunha ferramenta atractiva para usuarios que demandan un gran grao de control e flexibilidade no seu contorno de edición de texto. A entrada de texto facilítase mediante diversas características deseñadas para aumentar a eficiencia co teclado. Os usuarios poden executar comandos complexos mediante "key bindings", que poden ser personalizados e ampliados. A función de "recording" permite a creación de macros para automatizar secuencias de pulsacións de teclas e chamar funcións e mapeos internos ou definidos polo usuario. As abreviaturas, semellantes ás macros e aos mapeos de teclas, facilitan a expansión de cadeas curtas de texto en outras máis longas e tamén se poden usar para corrixir erros. Vim tamén inclúe un modo "easy" para usuarios que buscan unha solución de edición de texto máis sinxela.

Existen moitos plugins dispoñibles que amplían ou engaden nova funcionalidade a Vim. Estes complementos son xeralmente escritos na linguaxe de script interna de Vim, vimscript (tamén coñecida como VimL), pero tamén se poden escribir en outras linguaxes.

Hai proxectos que agrupan scripts complexos e personalizacións co obxectivo de converter Vim nunha ferramenta para unha tarefa específica ou de engadir unha funcionalidade importante ó seu comportamento. Exemplos inclúen Cream, que fai que Vim se comporte como un editor de clic e escritura, ou VimOutliner, que proporciona un *outliner* cómodo para os usuarios de sistemas similares a Unix.

## Características e melloras sobre vi 
Vim ten un modo de compatibilidade con vi, pero cando ese modo non se usa, Vim ten moitas melloras sobre vi. Con todo, incluso en modo de compatibilidade, Vim non é completamente compatible con vi tal como se define na *Single Unix Specification* e POSIX (por exemplo, Vim non admite o modo aberto de vi, só o modo visual). Os desenvolvedores de Vim afirman que é "moi compatible con Vi".

Algunhas das melloras de Vim inclúen funcións de completado, comparación e fusión de ficheiros (coñecida como **vimdiff**), un completo sistema de axuda integrado, expresións regulares estendidas, linguaxes de script (tanto nativas como a través de intérpretes alternativos como Perl, Python, Ruby, Tcl, etc.) incluíndo soporte para complementos (*plugins*), unha interface gráfica de usuario (gVim), características limitadas semellantes a un contorno de desenvolvemento integrado, interacción co rato (con e sen GUI), plegado de código, edición de ficheiros comprimidos ou arquivados en formatos gzip, bzip2, zip e tar, e de ficheiros a través de protocolos de rede como SSH, FTP e HTTP, preservación do estado da sesión, corrector ortográfico, xanelas divididas (horizontais e verticais) e con pestanas, soporte para Unicode e múltiples idiomas, resaltado de sintaxe, históricos de comandos, buscas e posicións do cursor entre sesións, historial de desfacer/refacer multinivel e ramificado que pode persistir entre sesións de edición, e o modo visual.

Mentres está en execución, Vim garda os cambios do usuario nun ficheiro de intercambio cunha extensión ".swp". Este ficheiro pode ser utilizado para recuperar despois dun fallo. Se un usuario intenta abrir un ficheiro e xa existe un ficheiro de intercambio, Vim advertirá ao usuario, e se o usuario continúa, Vim usará un ficheiro de intercambio coa extensión ".swo" (ou, se xa hai máis dun ficheiro de intercambio, ".swn", ".swm", etc.). Esta función pode ser desactivada.

## Vim script 
**Vim script** (tamén chamado **Vimscript** ou **VimL**) é a linguaxe de scripting incorporada en Vim. Baseada na linguaxe do editor **ex** do editor vi orixinal, as primeiras versións de Vim engadiron comandos para o fluxo de control e as definicións de funcións. Desde a versión 7, Vim script tamén soporta tipos de datos máis avanzados, como listas e dicionarios, e unha forma sinxela de programación orientada a obxectos. Funcións incorporadas como `map()` e `filter()` permiten unha forma básica de programación funcional, e Vim script soporta lambdas dende a versión 8.0. Vim script escríbese principalmente nun estilo imperativo de programación.

As macros de Vim poden conter unha secuencia de comandos en modo normal, pero tamén poden invocar comandos ex ou funcións escritas en Vim script para tarefas máis complexas. Case todas as extensións (chamadas plugins ou, máis comunmente, scripts) da funcionalidade básica de Vim están escritas en Vim script, pero os complementos tamén poden utilizar outras linguaxes como Perl, Python, Lua, Ruby, Tcl, ou Racket. Estes complementos poden ser instalados manualmente ou a través dun xestor de complementos como Vundle, Pathogen ou Vim-Plug.

Os ficheiros de script de Vim almacénanse como texto plano, de xeito semellante a outro código, e a extensión do nome do ficheiro é xeralmente `.vim`. Unha excepción notable a isto é o ficheiro de configuración de Vim, `.vimrc`.

### Exemplos 
```vim
" Este é o programa Hello World en Vim script.
echo "Ola, mundo!"

" Este é un simple bucle while en Vim script.
let i = 1
while i 
Ficheiro:Neovim_being_used_to_edit_its_own_configuration_file.png|Neovim con barra de estado configurada e esquema de cores escuro.
Ficheiro:Neovim_v0.9.0-dev-a0a1125_Material_Theme.png|Versión v0.9.0-dev modificada.

## Notas 
## Véxase tamén 
### Ligazóns externas 
* Web oficial
* TechTalk by Bram Moolenaar held on 25th Anniversary of first vim release en YouTube