Salta al contingut

Mode del Vi


Introducció

Vim Logo

El mode VI del Kate és un projecte per a portar l'edició modal com el Vim a l'editor de text Kate i per extensió a altres programes de KDE que comparteixen 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 aquest 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. A la part inferior de la pàgina es troba una llista de les coses que falten.

Aquesta pàgina està pensada per a ser un resum actualitzat d'aquest treball.

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

Objectius

L'objectiu del mode VI no és ser un reemplaçament complet del Vim i donar suport a totes les característiques del Vim. El seu objectiu és fer que la «manera del Vim» d'edició de text - i els hàbits apresos del Vim - estiguin disponibles per als programes que utilitzen l'editor de text Kate així com el seu editor intern. Aquests 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 del LaTeX

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

Incompatibilitats amb el Vim

Hi ha només algunes característiques del mode VI del Kate que són incompatibles amb el 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 actuï com a refer en el mode VI del Kate és que la drecera predeterminada Ctrl+r està agafada per la funció de substitució del Kate (cerca i substitució). De manera predeterminada, el mode VI no substituirà les dreceres del Kate (això es pot configurar a Arranjament → Configura el Kate… → Edita → Mode d'entrada del 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 al 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 imprimeix 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 el Kate «normal» (per tant, he triat deixar que l'ordre :print obri el diàleg d'impressió), seguint el principi de menys sorpresa en lloc d'imitar el comportament del 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 seva 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 això, tant yy com Y fan que es copiï la línia actual. En el mode VI del Kate, Y copiarà fins al final de la línia. Això es descriu com «més lògic» a la documentació del Vim.
  4. Kate: :map altera les línies seleccionades del document utilitzant l'expressió JavaScript proporcionada.
    Vim: :map afegeix l'assignació proporcionada als modes Normal i Visual. L'ordre «map» ja estava reservada pel 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 afegeix
AEntra en el mode d'inserció i afegeix al final de línia
iEntra en el mode d'inserció
IInsereix abans del primer caràcter no en blanc a 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
oObre una línia nova a sota
OObre una línia nova a sobre
JUneix les línies
cCanvia
CCanvia a final de línia
ccCanvia la línia
sSubstitueix un caràcter
SSubstitueix una línia
ddSuprimeix la línia
dSuprimeix
DSuprimeix fins al final de línia
xSuprimeix un caràcter
XSuprimeix un caràcter enrere
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
pEnganxa
PEnganxa abans
r.Substitueix un caràcter
REntra en el mode substitució
:Canvia a la línia d'ordres
/Cerca
uDesfés
<c-r>Refés
URefés
m.Estableix 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 avall
<pagedown>Desplaça una pàgina avall
<c-b>Desplaça una pàgina amunt
<pageup>Desplaça una pàgina amunt
<c-u>Desplaça mitja pàgina amunt
<c-d>Desplaça mitja pàgina avall
zzCentra la vista al cursor
gaImprimeix el codi del caràcter
.Repeteix l'últim canvi
==Alinea la línia
=Alinea les línies
~Canvia les majúscules/minúscules
<c-a>Afegeix a un nombre
<c-x>Resta d'un nombre
<c-o>Ves al salt anterior
<c-i>Ves 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>sDivideix horitzontalment
<c-w>SDivideix horitzontalment
<c-w><c-s>Divideix horitzontalment
<c-w>vDivideix verticalment
<c-w><c-v>Divideix 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/finalitza l'enregistrament 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
A la columna 0
<inici>A la columna 0
^Al primer caràcter de la línia
f.Cerca un caràcter
F.Cerca un caràcter enrere
t.Al caràcter
T.Al caràcter enrere
;Repeteix l'última ordre t. o f.
,Repeteix l'última ordre t. o f.
nCerca el següent
NCerca l'anterior
ggA la primera línia
GA l'última línia
wParaula cap endavant
WPARAULA cap endavant
bParaula cap enrere
BPARAULA cap enrere
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
*A l'ocurrència següent de la paraula sota el cursor
#A l'ocurrència anterior de la paraula sota el cursor
HA la primera línia de la finestra
MA la línia del mig de la finestra
LA la darrera línia de la finestra
gjA la línia visual següent
gkA 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>Insereix des de sota
<c-y>Insereix des de dalt
<c-w>Suprimeix una paraula
<c-r>.Insereix el contingut del registre
<c-o>Canvia al mode normal per a una ordre
<c-a>Augmenta el nombre sota el cursor
<c-x>Redueix el nombre sota el cursor

L'objecte de text coma

Això és una cosa que m'ha faltat al 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 a la il·lustració de la dreta, els tres intervals que aquest objecte de text pot abastar es ressalten en vermell.

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 del Vim

El Kate 4.11 ha presentat una opció de configuració oculta que fa que /, ? i : portin una ordre nova de cerca en lloc de la barra habitual de la línia d'ordres del Kate Cerca / Substitució /. La barra està pensada per a replicar moltes de les característiques de la barra d'ordres del Vim, i també per a corregir molts dels problemes amb la interacció del mode Vim del Kate amb la barra de cerca/substitució del Kate (la substitució interactiva no funciona; la cerca 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 el Vim, es poden tornar a reassignar amb el «cmap», «cnoremap», etc.:

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

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

  • En una barra de cerca (/ o ?), fa la compleció automàtica a partir de l'historial de cerca (el qual inclou les cerques iniciades a través de *, #, cerques realitzades en expressions substitució del «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ó del «sed» (p. ex. :s/cerca/substitució/gc), si el cursor està posicionat sobre la «cerca», la compleció automàtica serà a partir de l'historial de «cerca»; si està sobre «substitució», la compleció automàtica serà a partir de l'historial dels termes de «substitució».

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

Alguns exemples d'ús de la barra d'ordres emulada, amb animacions GIF, es troben en aquest 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 el fitxer katerc/kwriterc/kdeveloprc.

Característiques que falten

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

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

Si us manquen 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/disminueix el nombre de sota el cursor).
  • 2010-08-30:
    La pàgina s'ha mogut a kate-editor.org.
  • 2010-09-10:
    Corregeix 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 l'hugo.