Usando vim quando si preme sia l'apertura che la chiusura tra parentesi / parentesi / ecc


8

Quando ho imparato a programmare, premevo sia le parentesi aperte che quelle chiuse / etc, quindi il tasto freccia sinistra, quindi inserivo il testo. Quindi per inserire [hello]vorrei digitare [], quindi la freccia sinistra in modo che sia sopra la prima parentesi ( [).

Mi piace perché so di avere sempre il giusto numero di parentesi / etc e altrimenti sento che la mia mano deve spostarsi avanti e indietro sul tasto parentesi / etc

Ma, rispettando la mentalità di Vim, non voglio raggiungere continuamente i tasti freccia. C'è qualcosa che potrei fare che non implichi l'uso dei tasti freccia o il dover passare continuamente dalla modalità di inserimento per premere he tornare indietro?

Risposte:


5

Potresti cercare il plug -in auto-coppie :

Quando si digita un carattere simile {, (o [questo plugin aggiungerà automaticamente il carattere simmetrico e sostituirà il cursore in modalità inserimento tra le due parentesi. È anche in grado di essere "intelligente" durante l'eliminazione di quei personaggi.

Anche se posso darti un consiglio, dimentica i tasti freccia . Qualunque cosa tu voglia fare, c'è sempre un movimento più veloce accessibile senza muovere le mani dalla fila di casa. Potrebbe volerci un po 'di tempo per abituarsi, ma una volta che è un'abitudine non ti perderai nemmeno.


Grazie per il commento e, se non ti dispiace che te lo chieda; scrivi "[" poi "ciao" poi "]". Senza i plugin surround (che sembra un'ottima idea, grazie) sembra un po 'ingombrante andare avanti e indietro anche senza il problema di perdere potenzialmente il giusto numero di parentesi
JZL003,

Beh in realtà io uso sempre determina l'attivazione automatica coppie o surround.vim (vedere la risposta di Pietro), ma se dovessi farlo senza plug-in, lo farei [, ] , <Esc>(che posizionare il cursore sul ] ) e, infine, iche sarà posizionare il cursore tra le parentesi nella modalità di inserimento.
statox

@statox in modalità inserimento, come si sposta il cursore di due posizioni a sinistra? Con ctrl-o 2h? È più veloce che spostare la mano sui cursori? ;)
Vitor,

@Vitor No Premerò il tasto Esc per passare alla modalità normale, per un movimento di meno di 3 caratteri probabilmente colpirò più volte ho jaltrimenti userò altri movimenti. Mi sembra più veloce, ma capisco che alcune persone lo percepiscono in modo diverso :)
statox

@statox dopo 10 anni usando Vim, sto ancora lottando per usare hjkl e specialmente in questo scenario che ho appena descritto. Grazie per i tuoi commenti! :)
Vitor,

8

Esistono molti plugin "accoppia" che lo fanno automaticamente. Comunque tutti mi sfregano nel modo sbagliato. Tendo a usare il plugin surround.vim di Tim Pope . Faccio quanto segue: <c-s>]in modalità inserimento per inserire []con il cursore al centro delle parentesi.


più persone hanno bisogno di sapere questo, vim surround è più utile che semplicemente avvolgere le cose. Inoltre, sento il malessere del plugin di coppia, molto aggressivo e
finisco

4

Se hai solo bisogno di spostare uno spazio, ctrl-oin modalità inserimento rende il tuo prossimo input un comando normale, quindi ctrl-o, hne tornerai indietro di uno. La modeline verrà visualizzata --- (insert) ---fino a quando non si immette il comando normale.


2

lh-brackets fornisce mappature di modalità insert, normal e visual per inserire coppie di parentesi.

Appunti:

  • L'aggiunta di nuove coppie di parentesi è abbastanza semplice.
  • I mapping della modalità di inserimento sono sensibili al contesto, ovvero non espansi all'interno di contesti di stringhe o commenti, ...
  • A differenza del plugin surround, le mappature circostanti sono intuitive, ma non in stile vim. cioè colpire (in modalità visiva circonderà (per impostazione predefinita), non dobbiamo colpire si(o sequenze simili.

2

Le risposte precedenti sono molto buone. Ma penso che potresti desiderare qualcosa di più semplice. Personalmente lo uso h j k lper spostarmi. Pertanto, ho aggiunto al mio .vimrc quanto segue:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Solo un piccolo consiglio. Lei ha detto che il procedimento è i, [], <Esc>hi.

Esistono mappature in attesa dell'operatore, il che significa che è possibile ci[o di[o ii[.


1

Personalmente non sono un grande fan dell'inserimento automagico di personaggi; puoi facilmente definire una serie di mappature per inserire testo e altro il cursore dove vuoi:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Nota che un plugin come ultisnips fa anche cose del genere, ma più avanzate. Ad esempio in Javascript posso digitare:

if<Tab>hello

e ottengo:

if (hello) {

}

Puoi aggiungere un semplice frammento per completare le parentesi; questo è un file .snippet speciale che vive in ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} è la posizione del cursore.

vedi :help UltiSnips-adding-snippetsper maggiori informazioni.

Si noti che ultisnips richiede Python; un altro plugin ben noto è vim-snipmate . Vim Wiki ha un elenco completo di plugin di frammenti .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.