Vim è un potente editor di testo con numerose funzioni (Vi IMproved), come dice il nome stesso, Vim è Vi Migliorato.

Vi è l’editor di testo predefinito nei sistemi UNIX e Unix-like, la sua modalità di utilizzo è complessa per chi è alle prime armi, ma è possibile imparare a utilizzare Vim in meno di una settimana e imparare i comandi base con VimTutor.

$ vimtutor

Possiamo ottenere anche GVim per la modalità a interfaccia grafica

Il canale Telegram di InTheBit con le migliori offerte techle migliori offerte tech

$ gvim

Che di solito va scaricata dal proprio package manager a parte.

Perchè vim?

Vim come già detto ha 3 modalità di utilizzo: comando, visuale e inserimento, è particolarmente versatile e quando si prende la mano con la tastiera è molto veloce da utilizzare (esempio… mi basta dare due volte ‘d’ per eliminare una riga, oppure utilizzare i tasti ‘h’,’j’,’k’,’l’ per spostarsi nel file di testo (in modalità comando), sostituire una lettera utilizzando ‘r’, cancellare una lettera utilizzando ‘x’, inserire del testo subito sotto o sopra a una riga, rispettivamente, ‘o’/’O’.

Inoltre, Vim supporta l’evidenziazione di numerosi linguaggi di programmazione, partendo dal C, a Objective-C, da Python a Go, Ruby,Lua, Haskell, etc… Inoltre supporta evidenziazione di file di configurazione come l’ApacheConf oppure la configurazione di un server Samba… I file con estensione *.conf in generale hanno un’evidenziazione.

E’ possibile ottenere tantissimi plugin per renderlo ancora migliore, Vim è scriptabile al massimo.

~/.vimrc

~/.vimrc è un file che si trova in $HOME e contiene le istruzioni che servono a Vim per abilitare o meno determinate caratteristiche, sia chiaro che sono dei semplici comandi che possono essere eseguiti anche da Vim stesso (esempio):

~/.vimrc
=======
syntax on
=======

è uguale a dare il comando

:syntax on

in Vim

In ogni caso, torniamo a noi… Prendo il mio .vimrc che è molto semplice (.vimrc)

"Begin of vim config file
set nocompatible "Not compatible with Vi settings

""""""""""""""""""""""""""""""""
set backspace=indent,eol,start
set nobackup "No backup
set history=50		" keep 50 lines of command line history
set ruler		" show the cursor position all the time
set showcmd		" display incomplete commands
set incsearch		" do incremental searching
set autoindent " indenting
set showcmd 
set cursorline
set tabstop=2
set softtabstop=2
set noswapfile " No swapfile 
set nowb
set wildmenu 
set modeline
set ls=2 
set number " left-side line counter
set t_Co=256color "Enable 256 colors terminal

map Q gq
syntax on "Enable syntax
colorscheme pablo "pablo.vim color scheme
filetype plugin indent on 
autocmd FileType text setlocal textwidth=78

"Language interpreter/compiler execution
"C/GCC
"Python/python - env 
"Ruby/ruby 
"C++/G++/GCC-C++
"Shell/sh
autocmd FileType c map cc :!/usr/bin/gcc % -Wall -O2 -pipe -march=native -mtune=native && ./a.out 
autocmd FileType python map pyr :!/usr/bin/env python %
autocmd FileType ruby map rbr :!/usr/bin/ruby %
autocmd FileType cpp map cxx :!/usr/bin/g++ % -Wall -O2 -pipe -march=native -mtune=native && ./a.out 
autocmd FileType sh map shr :!/bin/sh %

if has('langmap') && exists('+langnoremap')
				set langnoremap
endif

"If mouse is availible enable it
if has('mouse')
				set mouse=a
endif
"End of vim config file

I punti chiave sono questi:

syntax on "Abilita evidenziazzione della sintassi
set cursorline "Abilita una linea che indica dove si trova il cursore
set tabstop=2 "Spazio del tab
set ls=2
set modeline "Statusbar
set number "Contatori alla sinistra
set t_Co=256color "Terminali a 256 colori
colorscheme pablo "Schema dei colori per la sintassi 
filetype plugin indent on 
"Per i file *.c, collega 'cc' al comando di compilazione con gcc
autocmd FileType c map cc :!/usr/bin/gcc % -Wall -O2 -pipe -march=native -mtune=native && ./a.out 
"Per i file *.py collega 'pyr' al comando di interpretazione del file stesso 
autocmd FileType python map pyr :!/usr/bin/env python %
"'rbr' -> Interpretazione
autocmd FileType ruby map rbr :!/usr/bin/ruby %
"'cxx' -> Compilazione && Esecuzione binario
autocmd FileType cpp map cxx :!/usr/bin/g++ % -Wall -O2 -pipe -march=native -mtune=native && ./a.out 
"'shr' -> Interpretazione 
autocmd FileType sh map shr :!/bin/sh %

"Il '%' indica di usare il file stesso
"autocmd FileType (estensione) map (tasti) :![comando] %

E’ anche possibile attivare il completamento con CONTROL+N


NERDTree
NERDTree è un plugin per Vim in grado di visualizzare l’albero della directory… Utile nel caso in cui stiamo scrivendo più moduli.

Comando Vim:

:NERDTree

NERDTree: Vim.org
Per installare NERDTree:

  • Decomprimere il zipfile
  • Spostare nerdtree_plugin/ in ~/.vim
  • Spostare plugin/* in ~/.vim/plugin
  • Spostare syntax/* in ~/.vim/syntax


Powerline, Statusbar avanzata per Vim
Per installare powerline vi suggerisco di seguire questa guida

Vediamo la modalità ‘NORMAL’ ovvero la modalità Comando, il tipo di file (UNIX(posix)), il linguaggio riconosciuto, in percentuale quanto manca alla fine del file… And more 🙂

nerdtree_powerline_edited
C.Vim
è un plugin essenziale per qualunque programmatore C/C++/C#/Objective-C/Objective-C++/…
Aiuta a inserire commenti (all’inizio è possibile personalizzare un commento con tutti i dati [filename, author, description, last update…]), dichiarazioni, migliora il completamento etc…

E’ possibile vedere le caratteristiche qui.
Sempre dal link sopra possiamo scaricare il plugin 🙂
Come installare C.Vim:

  • Decomprimere lo zipfile
  • Copiare autoload/* in ~/.vim/autoload
  • Copiare c-support/ in ~/.vim
  • Copiare ftplugin/* in ~/.vim/ftplugin
  • Copiare plugin/* in ~/.vim/plugin
  • Copiare syntax/* in ~/.vim/syntax

È anche possibile personalizzare i template (i commenti iniziali per esempio) modificando i file in ~/.vim/c-support/templates/*.template

cvim_edited


Version Control System plugin (vcscommand)
Un altro importante aspetto è quello del VCS, ovvero il sistema di controllo versione, utilizzeremo vcscommand (qui).
VCSCommand (vcscommand.vim) supporta i seguenti VCS:

  • CVS
  • SVN
  • SVK
  • Git
  • Hg
  • Bzr

Manca Mercurial… tuttavia potrebbe essere presente qualche altro plugin appositamente per questo VCS.
Quindi è possibile utilizzare questo plugin per pushare modifiche, verificare lo stato dei repository, committare etc…
Per installare il plugin:

  • Decomprimere lo zipfile
  • Copiare plugin/* in ~/.vim/plugin
  • Copiare syntax/* in ~/.vim/syntax

Suggerisco di leggere doc/vcscommand.txt per i comandi 🙂


HTML/XML tag match
Questo è un plugin simpatico… Sembra di poca importanza, invece è molto comodo… immaginiamo di trovarci in una decina di tag… Vim evidenzia la corrispondenza delle parentesi acute, il che è confusionale… perché non usare un plugin che evidenzia tutto il tag?

  • Decomprimere il bz2 usando il comando: tar xfpj matchtag.tar.bz2
  • Copiare ftplugin/* in ~/.vim/ftplugin

html_tag_match_edited
Copy-cut-paste: copiare/incollare facilmente dal/su buffer del terminale
Questo plugin è ottimo per copiare/incollare facilmente dal/su buffer terminale negli appunti di sistema (il copia/incolla)

Copy-cut-paste: qui

  • Decomprimere la tarball
  • Copiare plugin/* in ~/.vim/plugin


VimTouch + Guida pocket Android
Volevo anche informarvi che la Vim runtime è disponibile anche per piattaforme Android (ARM) grazie a VimTouch, è altamente personalizzabile… Solo che puoi usarla ovunque! 🙂

Inoltre, è disponibile un app che lista tutti i comandi di Vim: Vim Reference

Tmux
Tmux (Terminal MUltipleXer), infine, è un moltiplicatore di terminali e può essere utilizzato per più istanze di Vim insieme