Domanda

Dovrebbe essere banale e potrebbe anche essere nella guida, ma non riesco a capire come navigare.Come posso rientrare rapidamente più righe in vi?

È stato utile?

Soluzione

Usa il comando > . Per indentare 5 righe, 5> & Gt; . Per contrassegnare un blocco di linee e rientrare, Vjj & Gt; per indentare 3 righe (solo vim). Per rientrare in un blocco di parentesi graffe, posiziona il cursore su una delle parentesi graffe e usa > % o da qualsiasi punto all'interno del blocco usa gt;. i B

Se & # 8217; stai copiando blocchi di testo e devi allineare il rientro di un blocco nella sua nuova posizione, usa lasting p invece di solo p . Ciò allinea il blocco incollato con il testo circostante.

Inoltre, l'impostazione shiftwidth ti consente di controllare come molti spazi per rientrare.

Altri suggerimenti

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

Nei comandi seguenti, " reindentare " significa " linee di rientro in base alle impostazioni di rientro . " shiftwidth è la variabile principale 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, ad es. =iB è un comando di rientro del blocco valido. Dai un'occhiata a & Quot; Rientra un blocco di codice & Quot; per una bella esempio per provare questi comandi su.

Inoltre, ricorda che

.    Repeat last command

, quindi i comandi di rientro possono essere ripetuti facilmente e comodamente.

Ri-rientro dei file completi

Un'altra situazione comune richiede la correzione del rientro 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 buffer multipli:

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

In modalità visiva

Vjj> Visually mark and then indent 3 lines

In modalità 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

Questi sono utili quando si desidera rientrare in un intervallo specifico di linee, senza spostare il cursore.

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

Rientro mediante marcatori

Un altro approccio è tramite marker :

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 regolano il rientro

Puoi impostarli nel tuo .vimrc file .

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 rientro intelligente basato sul tipo di file. Prova ad aggiungere questo al tuo .vimrc:

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

Riferimenti

Una grande selezione sarebbe:

gg=G

È veramente veloce e tutto viene indentato ;-)

Prova anche questo per rientro C rientro, fai :help = per maggiori informazioni:

={

Questo rientra automaticamente nel blocco di codice corrente in cui ti trovi.

O semplicemente:

==

per rientrare automaticamente nella riga corrente.

Pressione dei tasti per più persone visive:

  1. Entra in modalità comando:
    Escape

  2. Spostati all'inizio dell'area per rientrare:
    h j k l # 8593 &; # 8595; & # 8592; & # 8594;

  3. Avvia un blocco:
    v

  4. Spostati alla fine dell'area per rientrare:
    h j k l # 8593 &; # 8595; & # 8592; & # 8594;

  5. (Opzionale) Digitare il numero di livelli di rientro desiderati
    0..9

  6. Esegue il rientro sul blocco:
    gt &;

Oltre alla risposta già fornita e accettata, è anche possibile posizionare un marker e quindi rientrare tutto dal cursore corrente al marker. Quindi, inserisci ma dove vuoi la parte superiore del blocco rientrato, il cursore verso il basso per quanto ti serve e quindi digita >'a (nota che & Quot; a & Quot; può essere sostituito con qualsiasi nome marcatore valido). Questo a volte è più facile di 5>> o vjjj>.

Il master di tutti i comandi è
gg=G

Indenta l'intero file!

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

Per rientrare nella riga corrente
==

Per indentare tutte le righe sotto la riga corrente

=G

Per rientrare n righe sotto la riga corrente

n==

Ad esempio, per rientrare 4 righe sotto la riga corrente

4==

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

=%

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

Vai all'inizio del testo

  • premi v per la modalità visiva.
  • usa la freccia su / giù per evidenziare il testo.
  • premi = per rientrare in tutte le righe che hai evidenziato.

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

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

vnoremap < <gv

vnoremap > >gv

Ti consente di rientrare nella selezione tutte le volte che vuoi.

Supponi di usare 2 spazi per indentare il tuo codice. Tipo:

:set shiftwidth=2
  • Digitare v (per accedere alla modalità di modifica del blocco visivo)
  • Spostare il cursore con i tasti freccia (o con h / j / k / l ) su evidenziare le righe che si desidera rientrare o deselezionare.

Quindi:

  • Digita > per rientrare una volta (2 spazi).
  • Digita 2 > per rientrare due volte (4 spazi).
  • Digita 3 > per rientrare tre volte (6 spazi).
  • ...
  • Digita < su unindent una volta (2 spazi).
  • Digita 2 < per unentent due volte (4 spazi).
  • Digita 3 < per unindent tre volte (6 spazi).
  • ...

Hai avuto l'idea.

( Le righe vuote non verranno rientrate, il che penso sia abbastanza carino. )


Ho trovato la risposta nella documentazione (g) vim per i blocchi di rientro:

:help visual-block
/indent
  

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

La bellezza dell'interfaccia utente di Vim è che è coerente. I comandi di modifica sono costituiti dal comando e da una mossa del cursore. I movimenti del cursore sono sempre gli stessi:

  • H nella parte superiore dello schermo, L nella parte inferiore, M nella parte centrale
  • n G per andare alla riga n, G da solo alla fine del file, g g all'inizio
  • n per passare alla corrispondenza di ricerca successiva, N alla precedente
  • } alla fine del paragrafo
  • % alla parentesi corrispondente successiva, tra parentesi o tipo di tag
  • inserisci alla riga successiva
  • ' x per contrassegnare x dove x è una lettera o un'altra '
  • molti altri, tra cui w e W per parola, $ o 0 ai suggerimenti della linea, ecc., che non si applicano qui perché non sono movimenti linea .

Quindi, per usare vim devi imparare a spostare il cursore e ricordare un repertorio di comandi come, ad esempio, > per rientrare (e lt; a " obsoleto ").
Quindi, per indentare le righe dalla posizione del cursore nella parte superiore dello schermo, fai > H , & Gt; G per rientrare nella parte inferiore del file.

Se, invece di digitare > H , digiti d H , allora sei eliminando lo stesso blocco di linee, c H per sostituirlo, ecc.

Alcuni movimenti del cursore si adattano meglio a comandi specifici. In particolare, il comando % è utile per indentare un intero blocco HTML o XML.
Se il file ha la sintassi evidenziata (:syn on), quindi impostare il cursore nel testo di un tag (come, nella & Quot; i & Quot; di & Lt; div & Gt; e inserendo > % rientrerà fino al tag < / div >

di chiusura.

Ecco come funziona vim: bisogna ricordare solo i movimenti del cursore e i comandi e come mescolarli.
Quindi la mia risposta a questa domanda sarebbe & Quot; andare a un'estremità del blocco di righe che si desidera rientrare, quindi digitare il comando & Gt; e un movimento all'altro fine del blocco " se rientro viene interpretato come spostamento delle linee, = se rientro viene interpretato come in una bella stampa.

fai questo

$vi .vimrc

e aggiungi questa riga

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

questo è solo per il file cpp puoi farlo per un altro tipo di file anche solo modificando il tipo di file ...

Un modo rapido per farlo usando VISUAL MODE usa lo stesso processo di commentare un blocco di codice.

Questo è utile se preferisci non modificare i tuoi shiftwidth o utilizzare qualsiasi set direttive ed è abbastanza flessibile da lavorare con TABS o SPAZI o qualsiasi altro personaggio.

  1. Posiziona il cursore all'inizio sul blocco
  2. v per passare a -- VISUAL MODE --
  3. Seleziona il testo da rientrare
  4. Digitare : per passare al prompt
  5. Sostituzione con 3 spazi iniziali:

    :'<,'>s/^/ /g

  6. O sostituendo con le schede iniziali:

    :'<,'>s/^/\t/g

  7. Breve spiegazione:

    '<,'> - All'interno dell'intervallo selezionato visivamente

    s/^/ /g - Inserisci 3 spazi all'inizio di ogni riga nell'intero intervallo

    (o)

    s/^/\t/g - Inserisci Tab all'inizio di ogni riga nell'intero intervallo

Mi piace contrassegnare il testo per il rientro:

  1. vai all'inizio della riga di testo quindi digita ma (a è l'etichetta del 'm'ark: potrebbe essere qualsiasi lettera)
  2. vai alla fine del testo e digita mz (di nuovo z potrebbe essere qualsiasi lettera)
  3. &:
  4. 'una,' z gt; oppure: 'a,' z < indenterà o esagererà (è una parola?)
  5. Voila! il testo viene spostato (le righe vuote rimangono vuote senza spazi)

PS: puoi usare: 'a,' tecnica z per contrassegnare un intervallo per qualsiasi operazione (d, y, s ///, ecc.) in cui potresti usare linee, numeri o%

>} o >{ trattino dalla riga corrente al paragrafo successivo

<} o <{ stesso non rientro

C'è un altro modo in cui & # 8217 non è ancora stato menzionato: puoi usare il comando norm i per inserire un determinato testo all'inizio della riga. Per inserire 10 spazi prima delle righe 2-10:

:2,10norm 10i 

Ricorda che ci deve essere un carattere spazio alla fine del comando - questo sarà il carattere che vogliamo aver inserito. Possiamo anche rientrare la riga con qualsiasi altro testo, ad esempio per rientrare in ogni riga del file con 5 caratteri di sottolineatura:

:%norm 5i_

O qualcosa di ancora più elegante:

:%norm 2i[ ]

Un esempio più pratico è commentare il codice Bash / Python / etc con # carattere:

:1,20norm i#

Per rientrare nel rientro usa x invece di i . Ad esempio per rimuovere i primi 5 caratteri da ogni riga:

:%norm 5x

Per me, la soluzione MacVim (Visual) era, selezionare con il mouse e premere " > " ;, ma dopo aver messo le seguenti righe in " ~ /. vimrc quot &; poiché mi piacciono gli spazi anziché le schede:

set expandtab
set tabstop=2
set shiftwidth=2

Inoltre è utile poter chiamare MacVim dalla riga di comando (Terminal.app), quindi poiché ho la seguente directory di supporto " ~ / bin " ;, dove inserisco uno script chiamato " macvim " ;:

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

E ovviamente in " ~ / .bashrc " ;:

export PATH=$PATH:$HOME/bin

Macports fa casino con " ~ / .profile " molto, quindi la variabile d'ambiente PATH può diventare piuttosto lunga.

Non ho trovato un metodo che utilizzo nei commenti, quindi lo condividerò (penso solo vim):

  1. Esc per accedere alla modalità di comando
  2. Passa al primo carattere dell'ultima riga che desideri identificare
  3. ctrl - v per iniziare la selezione del blocco
  4. Passa al primo carattere della prima riga che desideri identificare
  5. shift - i per accedere alla modalità di inserimento speciale
  6. digita tutte le spase / tab di cui hai bisogno per rientrare (2 ad esempio
  7. premi Esc e gli spazi appariranno in tutte le righe

Questo è utile quando non vuoi cambiare le impostazioni ident / tab in vimrc o ricordarle per cambiarle durante la modifica.

Per indentare uso lo stesso blocco ctrl - v selezionare per selezionare gli spazi ed eliminarlo con d .

Non so perché sia ​​così difficile trovare una risposta semplice come questa...

Io stesso dovevo lottare molto per sapere che è molto semplice

modifica il tuo .vimrc File in Home Directory Aggiungi questa riga

set cindent

nel tuo file dove vuoi rientrare correttamente

in modalità normale/comando

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

5== indenterà 5 righe dalla posizione corrente del cursore. quindi puoi digitare qualsiasi numero prima di ==, indenterà il numero di righe. Questo è in modalità comando.

gg=G indenterà l'intero file dall'alto verso il basso.

:help left

In ex mode è possibile utilizzare :left o :le per allineare le linee di un importo specificato. In particolare, :%le3 allinea le linee a sinistra nell'intervallo [intervallo]. Imposta il rientro nelle righe su [indent] (valore predefinito 0).

:%le 3 o :%left3 o :%left 3 o :5,7 le 3 allineerà l'intero file riempiendolo con tre spazi.

:le 0 allineerà le linee da 5 a 7 riempiendole di 3 spazi.

vim senza alcun valore o gvim rimarrà allineato con un'imbottitura pari a 0.

Funziona in <=> e <=>.

:line_num_start,line_num_end>

es.

14,21> shifts line number 14 to 21 to one tab

Aumenta '>' simbolo per più schede

es.

14,21>>> for 3 tabs

Usando molto Python, mi trovo spesso a dover spostare i blocchi di più di un rientro. Puoi farlo utilizzando uno dei metodi di selezione dei blocchi, quindi inserisci il numero di rientri che desideri saltare subito prima di >

Eg. V5j3> indenterà 5 righe 3 volte, ovvero 12 spazi se si utilizzano 4 spazi per i rientri

Per indentare ogni riga in un tipo di file, esc quindi G = gg

Come indentare immediatamente il codice evidenziato in vi con un # di spazi:

Opzione 1: rientro di un blocco di codice in vi su tre spazi con modalità Visual Block:

  1. Seleziona il blocco di codice che vuoi rientrare. Fallo utilizzando Ctrl + V in modalità normale e scorri verso il basso per selezionare il testo. Mentre è selezionato, inserisci : per dare un comando al blocco di testo selezionato.

  2. Nella riga di comando verrà visualizzato quanto segue: :'<,'>

  3. Per impostare il rientro su 3 spazi, digitare le 3 e premere Invio. Questo è ciò che appare: :'<,'>le 3

  4. Il testo selezionato viene immediatamente rientrato in 3 spazi.

Opzione 2: rientro di un blocco di codice in vi su tre spazi con modalità Visual Line:

  1. Apri il tuo file in VI.
  2. Posiziona il cursore sul codice
  3. In modalità normale, premere i seguenti tasti:

    Vjjjj:le 3
    

    Interpretazione di ciò che hai fatto:

    V significa iniziare a selezionare il testo.

    jjjj frecce verso il basso di 4 righe, evidenziando 4 righe.

    <=> dice a vi che inserirete un'istruzione per il testo evidenziato.

    <=> indica il rientro del testo evidenziato 3 righe.

    Il codice selezionato viene immediatamente aumentato o ridotto a un rientro di tre spazi.

Opzione 3: usa la modalità Visual Block e la modalità di inserimento speciale per aumentare il rientro:

  1. Apri il tuo file in VI.
  2. Posiziona il cursore sul codice
  3. In modalità normale, premere i seguenti tasti:

    Ctrl + V

    jjjj
    

    (premi la barra spaziatrice 5 volte)

    Esc Maiusc + i

    Tutto il testo evidenziato è rientrato di altri 5 spazi.

Per indentare tutti i file di 4:

esc 4G=G

Uso la selezione visiva in modalità blocco:

  • Vai all'inizio del blocco per muoverti (in alto o in basso).
  • Premere ctrl-v per accedere alla modalità blocco visivo.
  • Naviga per selezionare una colonna davanti alle linee.
  • Premere I (Maiusc i) per accedere alla modalità di inserimento.
  • Digita alcuni spazi.
  • Premere ESC. Tutte le linee si sposteranno.

Questo non è un uni-tasker. Funziona:

  • Nel mezzo di linee.
  • Per inserire qualsiasi stringa su tutte le righe.
  • Per cambiare una colonna (usare c invece di I).
  • yank, delete, substitute, etc ...
  • Per blocco di codice {}: = + %

  • Per la linea selezionata: Maiusc + v selezionare utilizzando il tasto freccia su / giù, quindi premere = .

  • Per l'intero file: gg + = + G

Nota: 'gg' significa andare alla riga 1, '=' è il comando indent e 'G' sposta il cursore alla fine del file .

Supponiamo che | rappresenti la posizione del cursore in Vim. Se il testo da rientrare è racchiuso in un blocco di codice come:

int main() {
line1
line2|
line3
}

puoi fare >i{ che significa " rientro (>) all'interno del blocco (i) blocco ({) &; e ottieni:

int main() {
    line1
    line2|
    line3
}

Ora supponiamo che le linee siano contigue ma al di fuori di un blocco, come:

do
line2|
line3
line4
done

Per indentare le righe da 2 a 4 è possibile selezionare visivamente le linee e digitare >2j. O ancora più veloce puoi fare >Nj per ottenere:

do
    line2|
    line3
    line4
done

Nota che N significa rientro dalla riga corrente a set relativenumber righe in basso. Se il numero di righe da rientrare è elevato, l'utente potrebbe impiegare alcuni secondi per contare il valore corretto di <=>. Per risparmiare secondi preziosi puoi attivare l'opzione numero relativo con <=> (disponibile dalla versione 7.3 di Vim).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top