Modalità VI
Introduzione
La modalità VI di Kate è un progetto per portare nell'editor di testo Kate e nelle estensioni degli altri programmi di KDE che condividono lo stesso componente una modalità di modifica simile a quella di Vim. È stata iniziata come progetto di Google Summer of Code nel 2008, quando sono state scritte tutte le funzionalità di base. Ho continuato a mantenere e a sviluppare ulteriormente questo codice, e il numero delle funzionalità mancanti rispetto a Vim è leggermente diminuito: la maggior parte degli utenti di Vim è già produttiva nella modalità VI di Kate. Un elenco che cosa manca si trova alla fine della pagina.
Questa pagina dà una panoramica aggiornata su questo lavoro.
Impostazioni → Configura Kate… → Modifica → Modalità di inserimento VI.
Può essere attivata e disattivata anche con l'impostazione «Modalità di inserimento VI» nel menu «Modifica» (la scorciatoia predefinita è Meta+Ctrl+V; in genere Meta è il tasto Windows).
Obiettivi
L'obiettivo della modalità Vi non è quello di essere un sostituto completo di Vim e di supportare tutte le sue funzionalità. Il suo scopo è rendere disponibile la modifica del testo "alla Vim", e le abitudini ad essa legate, ai programmi che usano al loro interno l'editor di testo Kate come editor. Tra questi ci sono
- L'editor di testo Kate
- KWrite - l'editor di testo semplice di KDE
- KDevelop - un IDE avanzato per molti linguaggi di programmazione
- Kile - un editor LaTeX
La modalità Vi punta ad integrarsi bene con i programmi, e devia dal comportamento di Vim quando ciò ha senso. Per esempio, :w
aprirà una finestra di salvataggio nella modalità Vi di Kate.
Incompatibilità con Vim
Ci sono solo solo poche funzionalità della modalità Vi di Kate che sono incompatibili con Vim (non contando quelle mancanti). Sono elencate sotto, con le rispettive motivazioni.
- Kate:
U
andCtrl+r
is redo
Vim:Ctrl+r
is normal redo,U
is used to undo all latest changes on one line
The reason for havingU
act as redo in Kate's VI mode is that the shortcutctrl+r
by default is taken by Kate's replace function (search and replace). By default, the VI mode won't override Kate's shortcuts (this can be configured in Settings → Configure Kate… → Editing → Vi Input Mode), therefore a redo-action needs to be available as a “regular” key press, too. Besides, the behaviour of the U command in Vim doesn't map well to Kate's internal undo system, so it would be non-trivial to support anyway. - Kate:
:print
shows the "print" dialogue
Vim::print
prints the lines of the given range like its grandfather ed Commands like :print are available not only in the VI mode but for users using “regular” Kate, too – I have therefore chosen to let the:print
command open the print dialogue – following the principle of least surprise instead of mimicking Vim's behaviour. - Kate:
Y
yanks to end of line.
Vim:Y
yanks whole line, just likeyy
. VI's behaviour for theY
command is in practice a bug; For both change and delete commands,cc
/dd
will do its action on the current line andC
/D
will work from the cursor column to the end of the line. However, bothyy
andY
yanks the current line.In Kate's VI ModeY
will yank to the end of the line. This is described as "more logical" in the Vim documentation. - Kate:
:map
alters the selected lines of the document using the provided JavaScript expression.
Vim::map
adds the provided mapping to Normal and Visual modes. The "map" command was already reserved by Kate; in 4.12+, you can use a combination of:nmap
and:vmap
to replace it.
Comandi supportati
Comandi supportati nelle modalità normale e visuale
Tasto | Descrizione |
---|---|
a | Entra nella modalità di inserimento e aggiungi |
A | Entra nella modalità di inserimento e aggiungi a fine riga |
i | Entra nella modalità di inserimento |
I | Inserisci prima del primo carattere non vuoto sulla riga |
v | Entra in modalità visuale |
V | Enter Visual Line Mode |
<c-v> | Enter Visual Block Mode |
gv | Riseleziona Visuale |
o | Apri nuova riga sotto |
O | Apri nuova riga sopra |
J | Unisci righe |
c | Modifica |
C | Change to EOL |
cc | Modifica riga |
s | Sostituisci carattere |
S | Sostituisci riga |
dd | Elimina riga |
d | Elimina |
D | Cancella fino a fine riga |
x | Elimina carattere |
X | Elimina carattere all'indietro |
gu | Metti in minuscolo |
guu | Metti riga in minuscolo |
gU | Metti in maiuscolo |
gUU | Metti riga in maiuscolo |
y | Copia |
yy | Copia riga |
Y | Copia fino a fine riga |
p | Incolla |
P | Incolla prima |
r. | Sostituisci carattere |
R | Entra in modalità di sostituzione |
: | Passa alla riga di comando |
/ | Cerca |
u | Annulla |
<c-r> | Rifai |
U | Rifai |
m. | Set mark |
>> | Fai rientrare la riga |
<< | Riduci il rientro della riga |
> | Fai rientrare le righe |
< | Riduci il rientro delle righe |
<c-f> | Scorri una pagina in giù |
<pag giù> | Scorri una pagina in giù |
<c-b> | Scorri una pagina in su |
<pag su> | Scorri una pagina in su |
<c-u> | Scorri mezza pagina in su |
<c-d> | Scorri una pagina in su |
zz | Centra la vista sul cursore |
ga | Stampa codice carattere |
. | Ripeti l'ultima modifica |
== | Allinea riga |
= | Allinea righe |
~ | Cambia maiuscole/minuscole |
<c-a> | Aggiungi a numero |
<c-x> | Sottrai da numero |
<c-o> | Go to prev jump |
<c-i> | Go to next jump |
<c-w>h | Switch to left view |
<c-w><c-h> | Switch to left view |
<c-w><left> | Switch to left view |
<c-w>j | Passa alla vista sotto |
<c-w><c-j> | Passa alla vista sotto |
<c-w><down> | Passa alla vista sotto |
<c-w>k | Passa alla vista sopra |
<c-w><c-k> | Passa alla vista sopra |
<c-w><up> | Passa alla vista sopra |
<c-w>l | Passa alla vista a destra |
<c-w><c-l> | Passa alla vista a destra |
<c-w><destra> | Passa alla vista a destra |
<c-w>w | Passa alla vista successiva |
<c-w><c-w> | Passa alla vista successiva |
<c-w>s | Dividi orizzontalmente |
<c-w>S | Dividi orizzontalmente |
<c-w><c-s> | Dividi orizzontalmente |
<c-w>v | Dividi verticalmente |
<c-w><c-v> | Dividi verticalmente |
gt | Passa alla scheda successiva |
gT | Passa alla scheda precedente |
gqq | Format line |
gq | Format lines |
q. / q | Begin/ finish recording macro using the named macro register. |
Movimenti supportati
Tasto | Descrizione |
---|---|
h | Sinistra |
<sinistra> | Sinistra |
<backspace> | Sinistra |
j | Giù |
<giù> | Giù |
<invio> | Down to first non blank |
k | Su |
<su> | Su |
– | Up to first non blank |
l | Destra |
<destra> | Destra |
<spazio> | Destra |
$ | To EOL |
<fine> | To EOL |
Alla colonna 0 | |
<home> | Alla colonna 0 |
^ | Al primo carattere della riga |
f. | Trova carattere |
F. | Trova carattere all'indietro |
t. | Al carattere |
T. | Al carattere all'indietro |
; | Ripeti l'ultimo comando t. o f. |
, | Ripeti l'ultimo comando t. o f. |
n | Trova successivo |
N | Trova precedente |
gg | Alla prima riga |
G | All'ultima riga |
w | Parola in avanti |
W | PAROLA in avanti |
b | Parola indietro |
B | PAROLA indietro |
e | Alla fine della parola |
E | Alla fine della PAROLA |
ge | Alla fine delle parola precedente |
gE | Alla fine delle PAROLA precedente |
% | Al carattere corrispondente |
`[a-zA-Z><] | To mark |
'[a-zA-Z><] | To mark line |
[[ | To previous brace block start |
]] | To next brace block start |
[] | To previous brace block end |
][ | To next brace block end |
* | L'occorrenza successiva della parola sotto il cursore |
# | L'occorrenza precedente della parola sotto il cursore |
H | Alla prima riga della finestra |
M | Alla riga in mezzo alla finestra |
L | All'ultima riga della finestra |
gj | To next visual line |
gk | To prev visual line |
Oggetti di testo supportati
Tasto | Descrizione |
---|---|
iw | Parola interna |
aw | Una parola |
iW | PAROLA interna |
aW | Una PAROLA |
i" | Inner double quote |
a" | A double quote |
i’ | Inner single quote |
a’ | A single quote |
i` | Inner back quote |
a` | A back quote |
ib | Parentesi interna |
i) | Parentesi interna |
i( | Parentesi interna |
ab | Una parentesi |
a) | Una parentesi |
a( | Una parentesi |
iB | Parentesi graffa interna |
o} | Parentesi graffa interna |
i{ | Parentesi graffa interna |
aB | Una parentesi graffa |
a} | Una parentesi graffa |
a{ | Una parentesi graffa |
i< | Inner inequality sign |
i> | Inner inequality sign |
a< | A inequality sign |
a> | A inequality sign |
i[ | Parentesi quadra interna |
I] | Parentesi quadra interna |
a[ | Una parentesi quadra |
a] | Una parentesi quadra |
i, | Virgola interna |
a, | Una virgola |
Comandi supportati nella modalità di inserimento
Tasto | Descrizione |
---|---|
<c-d> | Riduci rientro |
<c-t> | Rientra |
<c-e> | Inserisci da sotto |
<c-y> | Inserisci da sopra |
<c-w> | Elimina la parola |
<c-r>. | Inserisci il contenuto del registro |
<c-o> | Passa alla modalità normale per un comando |
<c-a> | Incrementa il numero sotto il cursore |
<c-x> | Decrementa il numero sotto il cursore |
L'oggetto di testo tra virgole
This is something that I have been missing in Vim. The comma text object makes it easy to modify parameter lists in C-like languages and other comma separated lists. It is basically the area between two commas or between a comma and a bracket. In the line shown in the illustration to the right, the three ranges this text object can span are highlighted in red.
Comma text object ranges. If the cursor is over, say, “arg2”, pressing c i , (“change inner comma”) would delete “double arg2” and place the cursor between the two commas in insert mode. A very convenient way to change a function's parameters.
Emulated Vim Command Bar
Kate 4.11 introduced a hidden config option that make /
, ?
and :
bring up a new search/ command in place of the usual Kate Find / Replace / Command-line bar. The bar is intended to replicate many of the features of Vim's command bar, and also to fix many of the issues with Kate Vim mode's interaction with Kate's Find/Replace bar (interactive replace not working; incremental search not positioning the cursor correctly; not usable in mappings/macros; etc).
Le seguenti scorciatoie sono fornite dalla barra dei comandi emulati; come per Vim possono essere riassociate con cmap, cnoremap, ecc:
Tasto | Descrizione |
---|---|
<c-r>. | inserisci i contenuti del registro. |
<c-r><c-w> | Insert word under the (document) cursor. |
<c-p> | Invoke context-specific completion (see below) move back/ up in the completion list. |
<c-p> | Spostati in avanti / indietro nell'elenco di completamento. |
<c-space> | Kate Vim Extension. Auto-complete word from document. |
<c-d> | Kate Vim Extension. In a sed-replace expression (i.e. s/find/replace/[g][c][i]), clear the "find" term and place the cursor there. |
<c-f> | Kate Vim Extension. In a sed-replace expression (i.e. s/find/replace/[g][c][i]), clear the “replace” term and place the cursor there. |
<c-g>. | Kate Vim Extension. As with ., insert the content of the named register, but escape it in such a way that when used with a search, we search for the literal content of the register; not the content of the register interpreted as a regex. |
The "context-specific completion" is decided as follows:
- In a search bar (
/
or?
), auto-complete from search history (which includes searches initiated via*
; and#
; searches done in sed-replace expressions; etc.) - In an empty command bar (
:
), auto-complete from command history (NB: auto-completion of command names is invoked automatically when you begin typing). - In a command-bar containing a sed-replace expression (e.g.
:s/find/replace/gc
), if the cursor is positioned over "find", auto-complete from the "search" history; if over the "replace", auto-complete from the history of "replace" terms.
When executing a sed-replace expression in the command bar with the "c" flag (e.g. s/find/replace/gc
), a Vim-style interactive search/replace expression will be initiated.
Some example usages of the emulated command bar, with GIF animations, are given in this blog. In 4.11, the emulated command bar can be enabled by setting the hidden config option "Vi Input Mode Emulate Command Bar" to true
in your katerc/kwriterc/kdeveloprc.
Funzionalità mancanti
Come già menzionato, l'obiettivo della modalità Vi di Kate non è supportare il 100% delle funzionalità di Vim, tuttavia ci sono delle funzionalità che sono purtroppo mancanti
- Visual block mode – especially the ability to prepend/append text to the visual block selection.
- Having ex commands available in other programs than the Kate application.
- The search code needs improvement and the * and # commands should just be regular searches.
If you miss other features or want to help on the ones mentioned above, feel free to contact me or send patches! :-)
Elenco modifiche
- 16/05/2010:
Versione iniziale. Ha raccolto le informazioni dalle voci del blog e dai file di R delle informazioni correnti. - 17/05/2010:
aggiuntiCtrl+A
eCtrl+X
(incrementa o decrementa i numeri sotto il cursore). - 30/08/2010:
ho spostato la pagina su kate-editor.org. - 2010-09-10:
Fixed the text on the comma text object and made some formatting fixes - 2021-02-03:
Converted key-binding tables to markdown for hugo.