Vi: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Az1568 (discussione | contributi)
m Revert to the revision prior to revision 51756 dated 2007-02-01 01:49:57 by 82.58.73.108 using popups
Riga 1: Riga 1:
==Cos'è==
==Cos'è==
'''Vi''' è un [[w:editor di testo|editor di testo]] a interfaccia testuale. È pensato per editare file sorgente di configurazione e simili. Offre tutta una serie di caratteristiche che facilitano l'editing di tipi di file specifici (quali C, HTML, e centinia di altri formati), l'automazione di azioni ripetitive e la manipolazione di più file.
distribuzioni di Vi, tuttavia si può tranquillamente usare Vim. È disponibile per una varietà di sitemi operativi, inclusi Windows e Linux. Può essere scaricato da [http://www.vim.org/download.php http://www.vim.org/download.php]

Vi è una vecchia versione dell'editor che faceva (e fa tuttora parte) di molte verisoni di UNIX. Esiste una versione notevolmente migliorata che si chiama Vim.

==Perché imparare Vi==
Per avere a disposizione un potente strumento di editing. Vi è conosciuto da praticamente ogni amministratore di sistemi unix/linux dato che è un editor presente in ogni distribuzione e viene utilizzato quando si vogliono effettuare rapidamente correzioni a file testuali senza usare l'interfaccia grafica. Vi viene utilizzato anche come editor di emergenza infatti per essere eseguito non richiede particolari librerie o processi in esecuzioni e quindi funziona anche quando il sistema non è totalmente configurato o non è totalmente operativo.

==Ottenere Vim==
Che io sappia non esistono distribuzioni di Vi, tuttavia si può tranquillamente usare Vim. È disponibile per una varietà di sitemi operativi, inclusi Windows e Linux. Può essere scaricato da [http://www.vim.org/download.php http://www.vim.org/download.php]


==Quickstart==
==Quickstart==
Riga 7: Riga 15:
vi [nome file]
vi [nome file]


A questo punto compare l'interfaccia di vi. Essa è composta dall'area per editare il testo e da uno o due righe in basso. Esse segnalano le informazioni sullo stato attuale e mostrano i comandi quando vengono immessi. Su alcune distribuzioni Linux può essere utile lanciare vim invece di vi, poiché cosìInserimento a partire dalla posizione del cursore.
A questo punto compare l'interfaccia di vi. Essa è composta dall'area per editare il testo e da uno o due righe in basso. Esse segnalano le informazioni sullo stato attuale e mostrano i comandi quando vengono immessi. Su alcune distribuzioni Linux può essere utile lanciare vim invece di vi, poiché così si ha un comportamento non standard, ma più intuitivo.

Esitono due modalità di funzionamento per vi:
*'''modalità comandi''': permette di inserire comandi e scegliere quale azione compiere. Questa modalità e suddivisa a sua volta in due sottogruppi:
**comandi immediati: sono formati da un numero limitato di caratteri.
**comandi a linea: sono iniziati premendo i due punti(:) e terminati da INVIO. Questi comandi sono simili all'editor di linea 'ex' e usano concetti di editing simili a 'perl' e 'awk'
*'''modalità editing''': permette di inserire e cancellare il testo. Funziona più o meno come un editor di testo quale blocco note o kate. Va notato che essendo un programma testuale alcune cose non sono fatte nel modo usuale.
TODO diagramma degli stati

All'avvio vi è in modalità comandi. Per passare alla modaltà editing bisogna premere
i
Questo è uno dei comandi immediati
È così possibile iniziare a inserire ed editare il testo. Sulla maggior parte delle piattaforme funzionano tutti i tasti:
INVIO, BACKSPACE, CANC, HOME, FINE,
FRECCIASX, FRECCIADX, FRECCIASU, FRECCIAGIU'
Va notato che questo non è un comportamento standard, poiché vi è stato originariamente pensato per funzionare con tastiere che non hanno questi tasti. Tuttavia possiamo non occuparci di ciò.
Per uscire e salvare il file
ESC :
a questo punto nell'ultima riga appaiono i due punti. Ciò indica che vi è entrato nella modalità in cui accetta i comandi formati da linee e non quelli immediati. A questo punto bisogna premere
wq INVIO
(nota che vi è case sensitive) per salvare e uscire.

==Smart stuff==
Questo è un elenco di cose furbe che vi sa fare.
Esiste un posto ufficiale per i [http://www.vim.org/tips/index.php Tip di Vim]. Una buona collezione di suggerimenti è [http://www.vim.org/tips/tip.php?tip_id=305 questa].
Sarebbe bello che ognuno contribuisse con i sui suggerimenti.
Come esercizio per i primi lettori di questo wiki lascio da trovare le spiegazioni per i comandi qui sotto riportati.
Nota che tutte le operazioni di ricerca e sostituzione in vim supportano le espressioni regolari
===Modalità comandi immediati===

'''inserimento o modifica'''

i
Inserimento a partire dalla posizione del cursore.


I
I
Riga 13: Riga 54:


a
a
Inserimento a partire alle punteggiature)
Inserimento a partire dalla posizione a destra del cursore.

A
Inserimento a partire dalla fine della riga

o
O
Inizia a scrivere in una nuova riga sotto (o) oppure sopra (O) quella corrente

~
Cambia il case del carattere corrente ( da maiuscolo in minuscolo e viceversa ) e spostati a destra di una posizione

r
modifica un carattere sulla posizione del cursore

r#
Da scoprire

R
modifica la linea fino ad <esc>

s
modifica un numero di caratteri

c(spost.)
modifica dal cursore al punto di arrivo di (spost.)

C
annulla la linea e la riscrive (fino ad <esc>)

<esc>
torna in stato comandi dopo inserimento o riscrittura

'''Cancellazioni'''
x
cancella un carattere dove e' posizionato il cursore

X
cancella un carattere a sinistra di dove e' posizionato il cursore

d(spost.)
cancella dalla posizione del cursore al punto di arrivo di (spost.)

D
cancella dalla posizione del cursore alla fine della linea

dd
Cancella una riga (quella su cui è il cusore)

d'x
cancella dalla riga corrente alla linea marcata dal crt "x"


'''spostamenti'''

l SPACEBAR
un carattere a destra

h <BKSP>
un carattere a sinistra

j <RETURN> +
una riga in basso
k -
una riga in alto

0 ^
inizio riga

$
fine riga

(n.linea)G
va alla riga (n.linea)

(n.col.)|
va alla colonna (n.col.)

w
una parola a destra (si ferma alle punteggiature)

W
una parola a destra (non si ferma alle punteggiature)

b
una parola a sinistra (si ferma alle punteggiature)

B
una parola a sinistra (non si ferma alle punteggiature)

e
alla fine della parola (si ferma alle punteggiature)


E
E

Versione delle 03:58, 1 feb 2007

Cos'è

Vi è un editor di testo a interfaccia testuale. È pensato per editare file sorgente di configurazione e simili. Offre tutta una serie di caratteristiche che facilitano l'editing di tipi di file specifici (quali C, HTML, e centinia di altri formati), l'automazione di azioni ripetitive e la manipolazione di più file.

Vi è una vecchia versione dell'editor che faceva (e fa tuttora parte) di molte verisoni di UNIX. Esiste una versione notevolmente migliorata che si chiama Vim.

Perché imparare Vi

Per avere a disposizione un potente strumento di editing. Vi è conosciuto da praticamente ogni amministratore di sistemi unix/linux dato che è un editor presente in ogni distribuzione e viene utilizzato quando si vogliono effettuare rapidamente correzioni a file testuali senza usare l'interfaccia grafica. Vi viene utilizzato anche come editor di emergenza infatti per essere eseguito non richiede particolari librerie o processi in esecuzioni e quindi funziona anche quando il sistema non è totalmente configurato o non è totalmente operativo.

Ottenere Vim

Che io sappia non esistono distribuzioni di Vi, tuttavia si può tranquillamente usare Vim. È disponibile per una varietà di sitemi operativi, inclusi Windows e Linux. Può essere scaricato da http://www.vim.org/download.php

Quickstart

Per lanciare vi è sufficiente eseguire

vi [nome file]

A questo punto compare l'interfaccia di vi. Essa è composta dall'area per editare il testo e da uno o due righe in basso. Esse segnalano le informazioni sullo stato attuale e mostrano i comandi quando vengono immessi. Su alcune distribuzioni Linux può essere utile lanciare vim invece di vi, poiché così si ha un comportamento non standard, ma più intuitivo.

Esitono due modalità di funzionamento per vi:

  • modalità comandi: permette di inserire comandi e scegliere quale azione compiere. Questa modalità e suddivisa a sua volta in due sottogruppi:
    • comandi immediati: sono formati da un numero limitato di caratteri.
    • comandi a linea: sono iniziati premendo i due punti(:) e terminati da INVIO. Questi comandi sono simili all'editor di linea 'ex' e usano concetti di editing simili a 'perl' e 'awk'
  • modalità editing: permette di inserire e cancellare il testo. Funziona più o meno come un editor di testo quale blocco note o kate. Va notato che essendo un programma testuale alcune cose non sono fatte nel modo usuale.

TODO diagramma degli stati

All'avvio vi è in modalità comandi. Per passare alla modaltà editing bisogna premere

i

Questo è uno dei comandi immediati È così possibile iniziare a inserire ed editare il testo. Sulla maggior parte delle piattaforme funzionano tutti i tasti:

INVIO, BACKSPACE, CANC, HOME, FINE,
FRECCIASX, FRECCIADX, FRECCIASU, FRECCIAGIU'

Va notato che questo non è un comportamento standard, poiché vi è stato originariamente pensato per funzionare con tastiere che non hanno questi tasti. Tuttavia possiamo non occuparci di ciò. Per uscire e salvare il file

ESC :

a questo punto nell'ultima riga appaiono i due punti. Ciò indica che vi è entrato nella modalità in cui accetta i comandi formati da linee e non quelli immediati. A questo punto bisogna premere

wq INVIO

(nota che vi è case sensitive) per salvare e uscire.

Smart stuff

Questo è un elenco di cose furbe che vi sa fare. Esiste un posto ufficiale per i Tip di Vim. Una buona collezione di suggerimenti è questa. Sarebbe bello che ognuno contribuisse con i sui suggerimenti. Come esercizio per i primi lettori di questo wiki lascio da trovare le spiegazioni per i comandi qui sotto riportati. Nota che tutte le operazioni di ricerca e sostituzione in vim supportano le espressioni regolari

Modalità comandi immediati

inserimento o modifica

i

Inserimento a partire dalla posizione del cursore.

I

Inserimento a partire dall'inizio della riga

a

Inserimento a partire dalla posizione a destra del cursore.

A

Inserimento a partire dalla fine della riga

o
O

Inizia a scrivere in una nuova riga sotto (o) oppure sopra (O) quella corrente

~

Cambia il case del carattere corrente ( da maiuscolo in minuscolo e viceversa ) e spostati a destra di una posizione

r

modifica un carattere sulla posizione del cursore

r#

Da scoprire

R

modifica la linea fino ad <esc>

s

modifica un numero di caratteri

c(spost.)

modifica dal cursore al punto di arrivo di (spost.)

C

annulla la linea e la riscrive (fino ad <esc>)

<esc>

torna in stato comandi dopo inserimento o riscrittura

Cancellazioni

x

cancella un carattere dove e' posizionato il cursore

X

cancella un carattere a sinistra di dove e' posizionato il cursore

d(spost.)

cancella dalla posizione del cursore al punto di arrivo di (spost.)

D

cancella dalla posizione del cursore alla fine della linea

dd

Cancella una riga (quella su cui è il cusore)

d'x

cancella dalla riga corrente alla linea marcata dal crt "x"


spostamenti

l SPACEBAR

un carattere a destra

h <BKSP>

un carattere a sinistra

j <RETURN> +

una riga in basso

k -

una riga in alto

0 ^

inizio riga

$

fine riga

(n.linea)G

va alla riga (n.linea)

(n.col.)|

va alla colonna (n.col.)

w

una parola a destra (si ferma alle punteggiature)

W

una parola a destra (non si ferma alle punteggiature)

b

una parola a sinistra (si ferma alle punteggiature)

B

una parola a sinistra (non si ferma alle punteggiature)

e

alla fine della parola (si ferma alle punteggiature)

E

alla fine della parola (non si ferma alle punteggiature)

G

sposta il cursore all'ultima riga del file

H

in cima alla pagina video

M

al centro della pagina video

L

in fondo alla pagina video


al punto in cui eravamo prima dell'ultimo spostamento

'(crt)

alla riga marcata (vedi m) con la lettera (crt)

Ctrl-U

sposta la pagina video e si posiziona mezza pagina indietro

Ctrl-D

sposta la pagina video e si posiziona mezza pagina avanti

Ctrl-F

una pagina avanti

Ctrl-B

una pagina indietro

z<RETURN>

porta la riga corrente ad inizio pagina

z.

porta la riga corrente a centro pagina

z-

porta la riga corrente a fine pagina


Comandi vari

Ctrl-R Ctrl-L

ridisegnano la pagina video

Ctrl-G

dati sul file che stiamo editando

u

Annulla l'ultima operazione fatta ripristinando la situazione a prima dell'ultimo inserimento o modifica

U

se non ci si e' spostati dalla riga ripristina la riga a come quando ci siamo posizionati su di essa

.

ripete l'ultimo comando

J

unifica la linea con quella seguente

y

copia la linea(e) in un buffer provvisorio

p
P

Incolla (paste) il contenuto del registro di default (registro ") prima (p) o dopo (P) la posizione corrente

"aY

copia la linea(e) nel buffer "a"

"ap

copia il contenuto del buffer "a" dopo il cursore

"ayL

copia nel buffer "a" le righe comrese tra il cursore e la fine della pagina video (L=spostamento)

/(string.)

cerca in avanti nel testo la stringa (string.)

n

continua la ricerca in avanti

?(string.)

cerca indietro nel testo la stringa (string.)

N

continua la ricerca all'indietro

fa

cerca sulla riga il carattere "a"

;

ripete la ricerca di tipo f

Fa

come f all'indietro

,

come ; all'indietro

ma

marca la linea con li carattere "a"

ZZ (:wq)

Salva ed esce

yy

Copia (yank) la riga corrente nel registro di default (registro ")

Utilizzo dei buffer

"ayy

Copia la riga corrente nel buffer a

"aP

Incolla in contenuto del buffer a dopo la riga corrente

"q5dd

Cancella 5 righe e le mette nel buffer q

"qP

Incolla le cinque righe cancellate dopo la riga corrente

Modalità comandi a linea

:1,$ s/frase1/frase2/g

sotituisce (s///) nelle rige da 1 all'ultima ($) tutte le occorrenze (g) (se omesso g solo la prima di ogni riga) di frase1 con frase2


:%s/frase1/frase2/g

sintassi alternativa al comando sopra. %s si riferisce a tutto il file.


:10,20 s/pippo//g

Da scoprire


:q!

Chiude il file senza salvare!

:w newfile

salva le variazioni in newfile, lasciando l'originale invariato.


:

entra in modo 'ex' (editor di linea)

:q!

Forza l'uscita anche dopo modifiche

:q

esce da vi

:wq

scrive ed esce

:w file

scrive il file (file)

:w>> (file)

aggiunge al file (file)

:1,5 co 25

copia le linee da 1 a 5 sotto la linea 25

:.,10 d

cancella le linee

:.,$ d

cancella le linee dalla corrente all'ultima

:1,$ :%

dalla prima all'ultima riga del file

:.,+7 d

cancella dalla riga corrente alla settima riga successiva

:.,'x d

cancella dalla riga corrente alla riga marcata dal crt. "x"

:n

legge il prossimo file

:e (file)

legge il file (file)

:e#

edita il file precedente

:r (file)

aggiunge all'editor il file (file) sotto la riga corrente

:g/s1/p

stampa a video tutte le righe contenti s1

:g/s1/s/s2/s3/gp

su tutte le righe contenenti s1 sostituisce la stringa s2 con s3 per tutte le occorrenze sulla riga e la stampa a video

:v/s1/p

stampa a video tutte le righe che non contengono s1

:m 25,54 70

sposta le righe da 25,54 sotto la riga 70

:sh

apre una shell

!(movim.)(cmd.)

riporta nel testo agendo tra la riga corrente e la riga di arrivo di (movim.) il risultato di (cmd.)

!Lsort

ordina le righe comprese tra la riga corrente e l'ultima riga a video

:set all

visualizza i settaggi

:se nu

abilita la visualizzazione dei numeri riga

:map

visualizza i mappaggi particolari.

Note per le stringhe s1,s2,s3 etc.:

^

inizio riga.

$

fine riga.

.

qualsiasi carattere.

\

il carattere successivo non viene interpretato (nomagic).

*

sequenza di caratteri.

&

sequenza trovata.

\1 \2 ....

primo,secondo,... blocco (fra parentesi quadre).

\U

upper case (Maiuscola).

\L

lower case (Minuscola).

\E

fine cambio case.


Esempi dell'utilizzo di ex:

1. Si ha una lista di nomi di files, in questa lista vogliamo che i file con estensione .cbl abbiano il nome maiuscolo.

  :g/.cbl/s/\[.*\].cbl/\U\1\E.cbl/


2. Si ha una lista di nomi di files, da questa lista vogliamo ricavare un comando che sposti, con il comando mv, i files nella directory /tmp.

  :g/.*/s//mv & \/tmp\/&/


Esempi di utilizzo di altre funzioni:

1. Si vogliono ordinare le righe dalla 1 alla 200 e dopo eliminare le righe che si susseguono uguali.

  ci si posiziona sulla riga 1                        1G
                                                      !
  ci si sposta sulla riga 200                         200G
  si ordinano le righe da 1 a 200                     sort
  ci si posiziona sulla riga 1                        1G
                                                      !
  ci si sposta sulla riga 200                         200G
  si eliminano in questo range le linee uguali        uniq

Esempi di utilizzo di buffer come macro:

  Posso registrare dentro un buffer delle macro da utilizzare oppure le posso associare ad un tasto funzione tramite il map (anche usando il file di configurazione .exrc).

1. voglio registrare una macro che mi tolga dalla riga successiva gli ultimi 3 caratteri

  scrivo su un rigo la macro       j$xxxk
  registro il rigo nel buffer a    "AY
  eseguo la macro con              @A

2. setto il tasto ctrl-F1 ad eseguire la macro dell'esempio 1

  :se map ctrl-F1 j$xxxk (su dos non lo accetta)

Modalità editing

CTRL+V

entra in modalità blocco visuale, ovvero permette di selezionare una porzione di testo per copiare (ESC y) o cancellare (ESC d)