Mode del Vi
Introducció
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.
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
- L'editor de text Kate
- KWrite: L'editor de text senzill de KDE
- KDevelop: Un IDE avançat per a molts llenguatges de programació
- 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.
- Kate:
U
iCtrl+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 queU
actuï com a refer en el mode VI del Kate és que la drecera predeterminadaCtrl+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. - 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. - Kate:
Y
(«yank») copia fins al final de la línia.
Vim:Y
copia tota la línia, comyy
. El comportament del VI per a l'ordreY
é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 iC
/D
funcionarà des de la columna del cursor fins al final de la línia. No obstant això, tantyy
comY
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. - 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
Tecla | Descripció |
---|---|
a | Entra en el mode d'inserció i afegeix |
A | Entra en el mode d'inserció i afegeix al final de línia |
i | Entra en el mode d'inserció |
I | Insereix abans del primer caràcter no en blanc a la línia |
v | Entra en el mode visual |
V | Entra en el mode visual de línia |
<c-v> | Entra en el mode visual de bloc |
gv | Torna a seleccionar el visual |
o | Obre una línia nova a sota |
O | Obre una línia nova a sobre |
J | Uneix les línies |
c | Canvia |
C | Canvia a final de línia |
cc | Canvia la línia |
s | Substitueix un caràcter |
S | Substitueix una línia |
dd | Suprimeix la línia |
d | Suprimeix |
D | Suprimeix fins al final de línia |
x | Suprimeix un caràcter |
X | Suprimeix un caràcter enrere |
gu | Torna a minúscules |
guu | Torna la línia a minúscules |
gU | Torna a majúscules |
gUU | Torna la línia a majúscules |
y | Copia |
yy | Copia la línia |
Y | Copia fins al final de línia |
p | Enganxa |
P | Enganxa abans |
r. | Substitueix un caràcter |
R | Entra en el mode substitució |
: | Canvia a la línia d'ordres |
/ | Cerca |
u | Desfés |
<c-r> | Refés |
U | Refé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 |
zz | Centra la vista al cursor |
ga | Imprimeix 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>h | Canvia a la vista esquerra |
<c-w><c-h> | Canvia a la vista esquerra |
<c-w><esquerra> | Canvia a la vista esquerra |
<c-w>j | Canvia a la vista inferior |
<c-w><c-j> | Canvia a la vista inferior |
<c-w><avall> | Canvia a la vista inferior |
<c-w>k | Canvia a la vista superior |
<c-w><c-k> | Canvia a la vista superior |
<c-w><amunt> | Canvia a la vista superior |
<c-w>l | Canvia a la vista dreta |
<c-w><c-l> | Canvia a la vista dreta |
<c-w><dreta> | Canvia a la vista dreta |
<c-w>w | Canvia a la vista següent |
<c-w><c-w> | Canvia a la vista següent |
<c-w>s | Divideix horitzontalment |
<c-w>S | Divideix horitzontalment |
<c-w><c-s> | Divideix horitzontalment |
<c-w>v | Divideix verticalment |
<c-w><c-v> | Divideix verticalment |
gt | Canvia a la pestanya següent |
gT | Canvia a la pestanya anterior |
gqq | Dona format a la línia |
gq | Dona format a les línies |
q. / q | Comença/finalitza l'enregistrament de la macro utilitzant el registre de macro anomenat. |
Moviments acceptats
Tecla | Descripció |
---|---|
h | Esquerra |
<esquerra> | Esquerra |
<retrocés> | Esquerra |
j | Avall |
<avall> | Avall |
<retorn> | Baixa fins al primer no blanc |
k | Amunt |
<amunt> | Amunt |
– | Puja fins al primer no blanc |
l | Dreta |
<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. |
n | Cerca el següent |
N | Cerca l'anterior |
gg | A la primera línia |
G | A l'última línia |
w | Paraula cap endavant |
W | PARAULA cap endavant |
b | Paraula cap enrere |
B | PARAULA cap enrere |
e | Al final de paraula |
E | Al final de PARAULA |
ge | Al final de la paraula anterior |
gE | Al 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 |
H | A la primera línia de la finestra |
M | A la línia del mig de la finestra |
L | A la darrera línia de la finestra |
gj | A la línia visual següent |
gk | A la línia visual anterior |
Objectes de text admesos
Tecla | Descripció |
---|---|
iw | Paraula interior |
aw | Una paraula |
iW | PARAULA interior |
aW | Una 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 |
ib | Parèntesi interior |
i) | Parèntesi interior |
i( | Parèntesi interior |
ab | Un parèntesi |
a) | Un parèntesi |
a( | Un parèntesi |
iB | Clau interior |
o} | Clau interior |
i{ | Clau interior |
aB | Una 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ó
Tecla | Descripció |
---|---|
<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.
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.:
Tecla | Descripció |
---|---|
<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 afegitCtrl+A
iCtrl+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.