Salta al contingut

Mode de Vi


Introducció

Vim Logo

El mode VI de Kate és un projecte per a portar l'edició modal com Vim a l'editor de text Kate i per extensió a altres programes de KDE que compartixen el mateix component d'edició. El projecte va començar com un projecte Google Summer of Code el 2008, on es va escriure tota la funcionalitat bàsica. He continuat mantenint i desenvolupant este codi i el nombre de característiques que falten de Vim està disminuint lentament. La majoria dels usuaris de Vim ja seran productius en el mode VI de Kate. En la part inferior de la pàgina es troba una llista de les coses que falten.

Esta pàgina està pensada per a ser un resum actualitzat d'este treball.

Per a activar el mode d'entrada VI, aneu fins a
Configuració → Configura Kate… → Edició → Mode d'entrada VI.
També es pot canviar amb l'opció «Mode d'entrada VI» en el menú «Edita». (La tecla de drecera predeterminada és «Meta+Ctrl+V» – on «Meta» normalment és la tecla Windows).

Objectius

L'objectiu del mode VI no és ser un reemplaçament complet de Vim i donar suport a totes les característiques de Vim. El seu objectiu és fer que el «mode de Vim» d'edició de text - i els hàbits apresos de Vim - estiguen disponibles per als programes que utilitzen l'editor de text Kate així com el seu editor intern. Estos programes inclouen

  1. L'editor de text Kate
  2. KWrite: L'editor de text senzill de KDE
  3. KDevelop: Un IDE avançat per a molts llenguatges de programació
  4. Kile: Un editor de LaTeX

Els objectius del mode VI s'integren bé amb els programes i es desvien del comportament de Vim on té sentit. Per exemple, :w obrirà un diàleg de guardada en el mode VI de Kate.

Incompatibilitats amb Vim

Hi ha només algunes característiques del mode VI de Kate que són incompatibles amb Vim (sense comptar les coses que falten). S'enumeren a continuació juntament amb els motius respectius.

  1. Kate: U i Ctrl+r és refer
    Vim: Ctrl+r és un refer normal, U s'utilitza per a desfer tots els últims canvis en una línia
    La raó per a fer que U actue com a refer en el mode VI de Kate és que la drecera predeterminada Ctrl+r està agafada per la funció de substitució de Kate (busca i substitució). De manera predeterminada, el mode VI no substituirà les dreceres de Kate (açò es pot configurar a Configuració → Configura Kate… → Edita → Mode d'entrada de Vi), per tant, una acció de refer també ha d'estar disponible com tecla «normal» a prémer. A més, el comportament de l'ordre U a Vim no es correspon bé amb el sistema de desfer intern de Kate, de manera que no seria trivial donar-hi suport de totes maneres.
  2. Kate: :print mostra el diàleg «print»
    Vim: :print imprimix les línies de l'interval indicat com les ordres del seu avi «ed». Com que :print està disponible no només en el mode VI, sinó també per als usuaris que utilitzen Kate «normal» (per tant, he triat deixar que l'ordre :print òbriga el diàleg d'impressió), seguint el principi de menys sorpresa en lloc d'imitar el comportament de Vim.
  3. Kate: Y («yank») copia fins al final de la línia.
    Vim: Y copia tota la línia, com yy. El comportament del VI per a l'ordre Y és en la pràctica un error. Per a les ordres de canvi i supressió, cc/dd farà la seua acció a la línia actual i C/D funcionarà des de la columna del cursor fins al final de la línia. No obstant açò, tant yy com Y fan que es copie la línia actual. En el mode VI de Kate, Y copiarà fins al final de la línia. Açò es descriu com «més lògic» a la documentació de Vim.
  4. Kate: :map altera les línies seleccionades del document utilitzant l'expressió JavaScript proporcionada.
    Vim: :map afig l'assignació proporcionada als modes Normal i Visual. L'ordre «map» ja estava reservada per Kate; en la 4.12+, podreu utilitzar una combinació de :nmap i :vmap per a substituir-la.

Ordres admeses

Ordres admeses en el mode normal/visual

TeclaDescripció
aEntra en el mode d'inserció i afig
AEntra en el mode d'inserció i afig al final de línia
iEntra en el mode d'inserció
IInserix abans del primer caràcter no en blanc en la línia
vEntra en el mode visual
VEntra en el mode visual de línia
<c-v>Entra en el mode visual de bloc
gvTorna a seleccionar el visual
oObri una línia nova davall
OObri una línia nova damunt
JUnix les línies
cCanvia
CCanvia a final de línia
ccCanvia la línia
sSubstituïx un caràcter
SSubstituïx una línia
ddSuprimix la línia
dSuprimix
DSuprimix fins al final de línia
xSuprimix un caràcter
XSuprimix un caràcter arrere
guTorna a minúscules
guuTorna la línia a minúscules
gUTorna a majúscules
gUUTorna la línia a majúscules
yCopia
yyCopia la línia
YCopia fins al final de línia
pApega
PApega abans
r.Substituïx un caràcter
REntra en el mode substitució
:Canvia a la línia d'ordres
/Busca
uDesfés
<c-r>Refés
URefés
m.Establix una marca
>>Línia amb sagnat
<<Línia sense sagnar
>Línies amb sagnat
<Línies sense sagnar
<c-f>Desplaça una pàgina cap avall
<pagedown>Desplaça una pàgina cap avall
<c-b>Desplaça una pàgina cap amunt
<pageup>Desplaça una pàgina cap amunt
<c-u>Desplaça mitja pàgina cap amunt
<c-d>Desplaça mitja pàgina cap avall
zzCentra la vista en el cursor
gaImprimix el codi del caràcter
.Repetix l'últim canvi
==Alinea la línia
=Alinea les línies
~Canvia les majúscules/minúscules
<c-a>Afig a un nombre
<c-x>Resta d'un nombre
<c-o>Ves fins al salt anterior
<c-i>Ves fins al salt següent
<c-w>hCanvia a la vista esquerra
<c-w><c-h>Canvia a la vista esquerra
<c-w><esquerra>Canvia a la vista esquerra
<c-w>jCanvia a la vista inferior
<c-w><c-j>Canvia a la vista inferior
<c-w><avall>Canvia a la vista inferior
<c-w>kCanvia a la vista superior
<c-w><c-k>Canvia a la vista superior
<c-w><amunt>Canvia a la vista superior
<c-w>lCanvia a la vista dreta
<c-w><c-l>Canvia a la vista dreta
<c-w><dreta>Canvia a la vista dreta
<c-w>wCanvia a la vista següent
<c-w><c-w>Canvia a la vista següent
<c-w>sDividix horitzontalment
<c-w>SDividix horitzontalment
<c-w><c-s>Dividix horitzontalment
<c-w>vDividix verticalment
<c-w><c-v>Dividix verticalment
gtCanvia a la pestanya següent
gTCanvia a la pestanya anterior
gqqDona format a la línia
gqDona format a les línies
q. / qComença o finalitza la gravació de la macro utilitzant el registre de macro anomenat.

Moviments acceptats

TeclaDescripció
hEsquerra
<esquerra>Esquerra
<retrocés>Esquerra
jAvall
<avall>Avall
<retorn>Baixa fins al primer no blanc
kAmunt
<amunt>Amunt
Puja fins al primer no blanc
lDreta
<dreta>Dreta
<espai>Dreta
$Fins al final de línia
<fi>Fins al final de línia
En la columna 0
<inici>En la columna 0
^En el primer caràcter de la línia
f.Busca un caràcter
F.Busca un caràcter arrere
t.En el caràcter
T.En el caràcter arrere
;Repetix l'última ordre t. o f.
,Repetix l'última ordre t. o f.
nBusca el següent
NBusca l'anterior
ggEn la primera línia
GEn l'última línia
wParaula cap avant
WPARAULA cap avant
bParaula cap arrere
BPARAULA cap arrere
eAl final de paraula
EAl final de PARAULA
geAl final de la paraula anterior
gEAl final de la PARAULA anterior
%Per a un element coincident
`[a-zA-Z><]Per a marcar
'[a-zA-Z><]Per a marcar una línia
[[A l'inici de bloc de clau anterior
]]A l'inici de bloc de clau següent
[]Al final de bloc de clau anterior
][Al final de bloc de clau següent
*En l'ocurrència següent de la paraula baix el cursor
#En l'ocurrència anterior de la paraula baix el cursor
HEn la primera línia de la finestra
MEn la línia del mig de la finestra
LA l'última línia de la finestra
gjEn la línia visual següent
gkEn la línia visual anterior

Objectes de text admesos

TeclaDescripció
iwParaula interior
awUna paraula
iWPARAULA interior
aWUna PARAULA
i"Cometes dobles interiors
a"Unes cometes dobles
i’Cometes simples interiors
a’Unes cometes simples
i`Cometes simples inverses interiors
a`Unes cometes simples inverses
ibParèntesi interior
i)Parèntesi interior
i(Parèntesi interior
abUn parèntesi
a)Un parèntesi
a(Un parèntesi
iBClau interior
o}Clau interior
i{Clau interior
aBUna clau
a}Una clau
a{Una clau
i<Signe de desigualtat interior
i>Signe de desigualtat interior
a<Un signe de desigualtat
a>Un signe de desigualtat
i[Claudàtor interior
I]Claudàtor interior
a[Un claudàtor
a]Un claudàtor
i,Coma interior
a,Una coma

Ordres admeses del mode d'inserció

TeclaDescripció
<c-d>Sense sagnar
<c-t>Sagna
<c-e>Inserix des de davall
<c-y>Inserix des de dalt
<c-w>Suprimix una paraula
<c-r>.Inserix el contingut del registre
<c-o>Canvia al mode normal per a una ordre
<c-a>Augmenta el nombre baix el cursor
<c-x>Reduïx el nombre baix el cursor

L'objecte de text coma

Açò és una cosa que m'ha faltat a Vim. L'objecte de text coma fa fàcil modificar llistes de paràmetres en llenguatges de tipus C i altres llistes separades per comes. És bàsicament l'àrea entre dues comes o entre una coma i un parèntesi. En la línia mostrada en la il·lustració de la dreta, els tres intervals que este objecte de text pot abastar es ressalten en roig.

comma to

Intervals d'objectes de text de comes. Si el cursor s'acaba, per exemple, «arg2», prement c i , («canvia la coma interior») suprimiria «doble arg2» i col·locaria el cursor entre les dues comes en el mode d'inserció. Una manera molt còmoda de canviar els paràmetres d'una funció.

Barra d'ordres emulada de Vim

Kate 4.11 ha presentat una opció de configuració oculta que fa que /, ? i : porten una ordre nova de busca en lloc de la barra habitual de la línia d'ordres de Kate Busca / Substitució /. La barra està pensada per a replicar moltes de les característiques de la barra d'ordres de Vim, i també per a corregir molts dels problemes amb la interacció del mode Vim de Kate amb la barra de busca i substitució de Kate (la substitució interactiva no funciona; la busca incremental no posiciona el cursor correctament; no es pot utilitzar en assignacions, macros, etc.).

Les dreceres següents són proporcionades per la barra d'ordres emulada; com amb Vim, es poden tornar a tornar a assignar amb «cmap», «cnoremap», etc.:

TeclaDescripció
<c-r>.inserix el contingut del registre.
<c-r><c-w>Inserix una paraula baix el cursor (document).
<c-p>Invoca la compleció específica del context (vegeu més avall)
mou cap arrere i cap amunt en la llista de compleció.
<c-p>Mou cap avant i cap avall en la llista de compleció.
<c-espai>Extensió Vim de Kate.
Compleció automàtica de paraules a partir del document.
<c-d>Extensió Vim de Kate.
En una expressió de substitució de «sed» (és a dir, s/busca/substitució/[g][c][i]),
neteja el terme «busca» i situa el cursor allà.
<c-f>Extensió Vim de Kate.
En una expressió de substitució de «sed» (és a dir, s/busca/substitució/[g][c][i]),
neteja el terme «substitució» i situa el cursor allà.
<c-g>.Extensió Vim de Kate.
Igual que amb ., inserix el contingut del registre amb nom,
però l'escapa de tal manera que quan s'utilitza amb una busca,
busquem el contingut literal del registre;
no el contingut del registre interpretat com una expressió regular.

La «compleció específica del context» es decidix de la manera següent:

  • En una barra de busca (/ o ?), fa la compleció automàtica a partir de l'historial de busca (el qual inclou les busques iniciades a través de *, #, busques realitzades en expressions substitució de «sed», etc.)
  • En una barra d'ordres buida (:), la compleció automàtica a partir de l'historial d'ordres (NB: la compleció automàtica dels noms d'ordres s'invocarà automàticament quan comenceu a teclejar).
  • En una barra d'ordres que conté una expressió de substitució de «sed» (p. ex., :s/busca/substitució/gc), si el cursor està ubicat sobre la «busca», la compleció automàtica serà a partir de l'historial de «busca»; si està sobre «substitució», la compleció automàtica serà a partir de l'historial dels termes de «substitució».

Quan s'execute una expressió de substitució de «sed» en la barra d'ordres amb l'indicador «c» (p. ex., s/busca/substitució/gc), s'iniciarà una expressió de busca i substitució interactiva a l'estil de Vim.

Alguns exemples d'ús de la barra d'ordres emulada, amb animacions GIF, es troben en este blog. En la 4.11, la barra d'ordres emulada es pot activar establint l'opció de configuració oculta «Vi Input Mode Emulate Command Bar» a true en els fitxers katerc, kwriterc o kdeveloprc.

Característiques que falten

Com s'ha dit anteriorment, l'objectiu del mode VI de Kate no és donar suport al 100% de les característiques de Vim, però, hi ha algunes característiques que desgraciadament s'han perdut

  • El mode de bloc visual, especialment la capacitat de preposar/afegir text a la selecció de bloc visual.
  • Tindre ordres «ex» disponibles en altres programes a banda de l'aplicació Kate.
  • Cal millorar el codi de busca i les ordres * i # només han de ser busques normals.

Si vos falten altres característiques o voleu ajudar en les esmentades anteriorment, no dubteu a contactar amb mi o enviar pedaços! :-)

Registre de canvis

  • 2010-05-16:
    Versió inicial. S'ha recopilat la informació de les entrades del blog i dels fitxers README per a crear una font única d'informació actual.
  • 2010-05-17:
    S'han afegit Ctrl+A i Ctrl+X (incrementa/disminuïx el nombre de baix el cursor).
  • 2010-08-30:
    La pàgina s'ha mogut cap a kate-editor.org.
  • 2010-09-10:
    Corregix el text de l'objecte de text de coma i fer algunes correccions de format
  • 2021-02-03:
    S'han convertit les taules de lligams de tecla a markdown per a Hugo.