Domanda Rientra più righe rapidamente in vi


Dovrebbe essere banale, e potrebbe anche essere in aiuto, ma non riesco a capire come navigarlo. Come faccio a indentare più righe rapidamente in vi?


1968
2017-10-25 03:27


origine


risposte:


Usa il > comando. Per indentare 5 righe, 5>>. Per contrassegnare un blocco di linee e indentarlo, Vjj> per indentare 3 righe (solo vim). Per far rientrare un blocco di parentesi graffe, posiziona il cursore su una delle parentesi graffe e usa >%.

Se stai copiando blocchi di testo e devi allineare il rientro di un blocco nella sua nuova posizione, usa ]p invece di solo p. Questo allinea il blocco incollato con il testo circostante.

Anche il shiftwidth l'impostazione ti consente di controllare quanti spazi inserire.


2321
2017-10-25 03:28



Questa risposta riassume le altre risposte e i commenti di questa domanda e aggiunge ulteriori informazioni basate sul Documentazione Vim e il Vim wiki. Per concisione, questa risposta non distingue tra comandi specifici di Vi e Vim.

Nei comandi sottostanti, "rientri" significa "linee di indentazione in base alla tua impostazioni di indentazione". shiftwidth è la variabile primaria che controlla il rientro.

Comandi generali

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

Puoi sostituire { con } o B, per esempio. =iB è un comando di rientro del blocco valido. Dare un'occhiata a "Rientra un blocco di codice" per un bell'esempio per provare questi comandi.

Inoltre, ricordalo

.    Repeat last command

così i comandi di indentazione possono essere facilmente e comodamente ripetuti.

Ri-indentazione di file completi

Un'altra situazione comune è che è necessario correggere i rientri in un file sorgente:

gg=G  Re-indent entire buffer

Puoi estendere questa idea a più file:

" Re-indent all your c source code:
:args *.c
:argdo normal gg=G
:wall

O più buffer:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

In modalità visiva

Vjj> Visually mark and then indent 3 lines

In modalità di inserimento

Questi comandi si applicano alla riga corrente:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

Comandi Ex

Sono utili quando si desidera indentare un intervallo specifico di linee, senza spostare il proprio cursore.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

Rientro usando i marcatori

Un altro approccio è via marcatori:

ma     Mark top of block to indent as marker 'a'

... sposta il cursore nella posizione finale

>'a    Indent from marker 'a' to current location

Variabili che governano il rientro

È possibile impostare questi nel tuo file .vimrc.

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

Vim ha un'indentazione intelligente basata sul tipo di file. Prova ad aggiungerlo al tuo .vimrc:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

Riferimenti


886
2018-03-06 17:29



Una grande selezione sarebbe

gg=G

è molto veloce e tutto viene rientrato ;-)


116
2018-01-20 21:11



Prova anche questo per C-indentazione indentazione, fallo :help = per maggiori informazioni:

={

Ciò farà rientrare automaticamente il blocco di codice corrente in cui ti trovi.

O semplicemente:

==

per indentare automaticamente la riga corrente.


105
2017-10-25 04:21



Key-presses per più persone visive:

  1. Entra in modalità di comando:
    Fuga 

  2. Spostati all'inizio dell'area per il rientro:
    hjKl 

  3. Inizia un blocco:
    v

  4. Spostati alla fine dell'area per rientrare:
    hjKl 

  5. (Facoltativo) Digitare il numero di livelli di indentazione desiderati
    0..9

  6. Esegui il rientro sul blocco:
    >


73
2017-10-25 09:16



Oltre alla risposta già data e accettata, è anche possibile posizionare un marker e quindi far rientrare qualsiasi cosa dal cursore corrente al marker. Quindi, entra ma dove vuoi la parte superiore del tuo blocco rientrato, posiziona il cursore verso il basso quanto necessario e poi digita >'a (nota che "a"può essere sostituito con qualsiasi nome di marker valido). Questo a volte è più facile di 5>> o vjjj>.


62
2017-10-25 04:00



Il maestro di tutti i comandi è
gg=G

Questo fa rientrare l'intero file!

Di seguito sono riportati alcuni dei comandi semplici ed eleganti utilizzati per indentare le linee rapidamente in Vim o gVim.

Per rientare la riga corrente
==

Per rientrare tutte le righe sotto la riga corrente

=G

Per rientrare n linee sotto la linea corrente

n==

Ad esempio, per indentare 4 righe sotto la riga corrente

4==

Per indentare un blocco di codice, vai a una delle parentesi e usa il comando

=%

Questi sono i comandi più semplici ma potenti per indentare più linee.


60
2018-04-18 18:41



Vai all'inizio del testo

  • stampa v per la modalità visiva.
  • uso su/giù freccia per evidenziare il testo.
  • stampa = per indentare tutte le righe evidenziate.

29
2017-11-04 22:57



Oltre alle soluzioni offerte, mi piace fare le cose un paragrafo alla volta con >}


27
2017-10-25 04:08



quando si seleziona un blocco e si usa> per rientrare, i rientri tornano alla modalità normale. Ho questo nel mio .vimrc:

vnoremap < <gv

vnoremap > >gv

Ti consente di indentare la tua selezione per tutto il tempo che desideri.


25
2018-02-15 05:42



Supponiamo di utilizzare 2 spazi per indentare il codice. Genere:

:set shiftwidth=2
  • genere v (per accedere alla modalità di modifica del blocco visivo)
  • Muovi il cursore con i tasti freccia (o con h/j/K/l) per evidenziare le linee che si desidera indentare o non modificare.

Poi:

  • genere > per indentare una volta (2 spazi).
  • genere 2> per indentare due volte (4 spazi).
  • genere 3> per indentare tre volte (6 spazi).
  • ...
  • genere < unindent una volta (2 spazi).
  • genere 2< per raddoppiare due volte (4 spazi).
  • genere 3< a unindent tre volte (6 spazi).
  • ...

Hai un'idea.

(Le linee vuote non si frastagliano, il che credo sia carino.)


Ho trovato la risposta nella (v) documentazione di vim per il rientro dei blocchi:

:help visual-block
/indent

Se vuoi dare un conteggio al comando, fallo appena prima di digitare   il carattere dell'operatore: "v {move-around} 3>" (sposta le linee a 3 trattini in   la destra).


20
2018-01-31 19:17