Mode de Vi
Introducció
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.
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
- 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 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.
- 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
actue com a refer en el mode VI de Kate és que la drecera predeterminadaCtrl+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. - 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. - 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 seua acció a la línia actual iC
/D
funcionarà des de la columna del cursor fins al final de la línia. No obstant açò, tantyy
comY
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. - 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
Tecla | Descripció |
---|---|
a | Entra en el mode d'inserció i afig |
A | Entra en el mode d'inserció i afig al final de línia |
i | Entra en el mode d'inserció |
I | Inserix abans del primer caràcter no en blanc en 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 | Obri una línia nova davall |
O | Obri una línia nova damunt |
J | Unix les línies |
c | Canvia |
C | Canvia a final de línia |
cc | Canvia la línia |
s | Substituïx un caràcter |
S | Substituïx una línia |
dd | Suprimix la línia |
d | Suprimix |
D | Suprimix fins al final de línia |
x | Suprimix un caràcter |
X | Suprimix un caràcter arrere |
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 | Apega |
P | Apega abans |
r. | Substituïx un caràcter |
R | Entra en el mode substitució |
: | Canvia a la línia d'ordres |
/ | Busca |
u | Desfés |
<c-r> | Refés |
U | Refé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 |
zz | Centra la vista en el cursor |
ga | Imprimix 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>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 | Dividix horitzontalment |
<c-w>S | Dividix horitzontalment |
<c-w><c-s> | Dividix horitzontalment |
<c-w>v | Dividix verticalment |
<c-w><c-v> | Dividix 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 o finalitza la gravació 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 |
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. |
n | Busca el següent |
N | Busca l'anterior |
gg | En la primera línia |
G | En l'última línia |
w | Paraula cap avant |
W | PARAULA cap avant |
b | Paraula cap arrere |
B | PARAULA cap arrere |
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 |
* | En l'ocurrència següent de la paraula baix el cursor |
# | En l'ocurrència anterior de la paraula baix el cursor |
H | En la primera línia de la finestra |
M | En la línia del mig de la finestra |
L | A l'última línia de la finestra |
gj | En la línia visual següent |
gk | En 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> | 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.
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.:
Tecla | Descripció |
---|---|
<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 afegitCtrl+A
iCtrl+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.