Dovrebbe essere banale e potrebbe anche esserci di aiuto, ma non riesco a capire come navigare. Come posso rientrare più righe rapidamente in vi?
Dovrebbe essere banale e potrebbe anche esserci di aiuto, ma non riesco a capire come navigare. Come posso rientrare più righe rapidamente in vi?
Risposte:
Usa il >comando Per far rientrare cinque linee, 5>>. Per contrassegnare un blocco di linee e rientrare, Vjj>per rientrare tre linee (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 >iB.
Se stai copiando blocchi di testo e devi allineare il rientro di un blocco nella sua nuova posizione, usa ]pinvece di solo p. Ciò allinea il blocco incollato con il testo circostante.
Inoltre, l' shiftwidth
impostazione consente di controllare il numero di spazi da rientrare.
shiftwidth
impostazione per il modo di cambiarlo.
Questa risposta riassume le altre risposte e commenti di questa domanda e aggiunge ulteriori informazioni basate sulla documentazione di Vim e sul wiki di Vim . Per concisione, questa risposta non distingue tra comandi specifici di Vi e Vim.
Nei comandi seguenti, "rientro" indica " rientri 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
È possibile sostituire {
con }
o B
, ad esempio, =iB
è un comando di rientro di blocco valido. Dai un'occhiata a "Rientra un blocco di codice" per un bell'esempio per provare questi comandi.
Inoltre, ricordalo
. Repeat last command
, quindi i comandi di rientro possono essere ripetuti facilmente e comodamente.
Rientro dei file completi
Un'altra situazione comune richiede la correzione del rientro in un file di origine:
gg=G Re-indent entire buffer
È possibile 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 three 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
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 marcatori :
ma Mark top of block to indent as marker 'a'
... sposta il cursore sulla posizione finale
>'a Indent from marker 'a' to current location
Variabili che governano il rientro
Puoi impostarli 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 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
>}
. Grazie a lungo
Una grande selezione sarebbe:
gg=G
È veramente veloce e tutto viene indentato ;-)
gg=G
posiziona ogni riga a partire dalla posizione 1. Tutti gli spazi bianchi sono stati rimossi. C'è qualcos'altro di specifico in XML?
set cindent
dovrebbe essere in vimrc o dovrebbe funzionare :set cindent
prima di eseguire quel comando
Prova anche questo per l' indentazione con rientro C. Fare :help =
per ulteriori informazioni:
={
Ciò inserirà automaticamente il blocco di codice corrente in cui ti trovi.
O semplicemente:
==
per rientrare automaticamente nella riga corrente.
Tasti premuti per più persone visive:
Entra in modalità comando:
Escape
Spostati all'inizio dell'area per rientrare:
hjkl↑↓←→
Inizia un blocco:
v
Spostati alla fine dell'area per rientrare:
hjkl↑↓←→
(Facoltativo) Digitare il numero di livelli di rientro desiderati
0..9
Eseguire il rientro sul blocco:
>
Il padrone di tutti i comandi è
gg=G
Questo rientra l'intero file!
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 rientrare in tutte le righe sotto la riga corrente
=G
Per rientrare le n
righe sotto la riga corrente
n==
Ad esempio, per rientrare 4 righe sotto la riga corrente
4==
Per rientrare in 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.
vim
, no vi
.
vim
cui è stato collegato vi
?
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, cursore verso il basso per quanto ti serve e quindi digita >'a
(nota che " a
" può essere sostituito con qualsiasi nome di marcatore valido). Questo a volte è più facile di 5>>
o vjjj>
.
Vai all'inizio del testo
Oltre alle soluzioni offerte, mi piace fare le cose un paragrafo alla volta >}
Quando selezioni un blocco e lo usi >per rientrare, questo rientra nella modalità normale. Ho questo nel mio file .vimrc:
vnoremap < <gv
vnoremap > >gv
Ti consente di rientrare nella selezione tutte le volte che vuoi.
Supponiamo di utilizzare 2 spazi per rientrare nel codice. Genere:
:set shiftwidth=2
Poi:
Ti viene l'idea.
(Le righe vuote non saranno 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 si desidera dare un conteggio al comando, eseguire questa operazione appena prima di digitare il carattere operatore: "v {move-around} 3>" (sposta le righe 3 rientri a destra).
La bellezza dell'interfaccia utente di Vim è la sua coerenza. I comandi di modifica sono costituiti dal comando e da una mossa del cursore. I movimenti del cursore sono sempre gli stessi:
'
.Quindi, per usare vim devi imparare a spostare il cursore e ricordare un repertorio di comandi come, ad esempio, >per rientrare (e< "superamento").
Così, per il rientro delle linee dalla posizione del cursore alla parte superiore dello schermo si fa >H, >Gper far rientrare alla fine del file.
Se invece di digitare digiti >H, stai dHeliminando lo stesso blocco di righe,cH per sostituirlo, ecc.
Alcuni movimenti del cursore si adattano meglio con 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 "i" di <div> e l'immissione >%rientrerà fino al tag di chiusura </div>.
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 "andare a un'estremità del blocco di linee che si desidera rientrare, quindi digitare il >comando e un movimento all'altra estremità del blocco" se il rientro viene interpretato come spostamento delle linee, =se rientro viene interpretato come nella bella stampa.
Fai questo:
$vi .vimrc
E aggiungi questa riga:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Questo è solo per un file cpp. Puoi farlo per un altro tipo di file, anche semplicemente modificando il tipo di file ...
È possibile utilizzare il norm i
comando 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 personaggio che vogliamo aver inserito. Possiamo anche rientrare in una riga con qualsiasi altro testo, ad esempio per rientrare in ogni riga di un file con cinque caratteri di sottolineatura:
:%norm 5i_
O qualcosa di ancora più elegante:
:%norm 2i[ ]
Un esempio più pratico è commentare il codice Bash / Python / etc con il carattere #:
:1,20norm i#
Per rientrare nel rientro usare xinvece di i. Ad esempio, per rimuovere i primi 5 caratteri da ogni riga:
:%norm 5x
Un modo rapido per farlo usando VISUAL MODE
utilizzando lo stesso processo di commentare un blocco di codice.
Ciò è utile se si preferisce non modificare shiftwidth
o utilizzare alcuna set
direttiva ed è abbastanza flessibile da funzionare con TABS o SPAZI o qualsiasi altro personaggio.
-- VISUAL MODE --
:
per passare al promptSostituzione con 3 spazi iniziali:
:'<,'>s/^/ /g
O sostituendo con le schede principali:
:'<,'>s/^/\t/g
Breve spiegazione:
'<,'>
- All'interno dell'intervallo selezionato visivamente
s/^/ /g
- Inserire 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:
PS: è possibile utilizzare la :'a,'ztecnica per contrassegnare un intervallo per qualsiasi operazione (d, y, s ///, ecc.) In cui è possibile utilizzare linee, numeri o %.
:help left
In ex mode
puoi usare :left
o :le
per allineare le linee di un importo specificato. Specificamente, :left
sarà Sinistra linee di allineamento nel [range]. Imposta il rientro nelle righe su [rientro] (impostazione predefinita 0).
:%le3
oppure :%le 3
oppure :%left3
o :%left 3
allineerà l'intero file riempiendolo con tre spazi.
:5,7 le 3
allineerà le linee da 5 a 7 riempiendole con tre spazi.
:le
senza alcun valore o :le 0
rimarrà allineato con un'imbottitura pari a 0.
Funziona con Vim e gVim.
:'<,'>le4
inserire gli spazi. Grazie!
Per me, la soluzione MacVim (Visual) era, selezionare con il mouse e premere ">", ma dopo aver messo le seguenti righe in "~ / .vimrc" 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 dal momento che 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 molto casino con "~ / .profile", quindi la variabile d'ambiente PATH può diventare piuttosto lunga.
5==
indenterà cinque righe dalla posizione corrente del cursore.
Quindi puoi digitare qualsiasi numero prima ==
. Indenterà il numero di righe. Questo è in modalità comando.
gg=G
indenterà l'intero file dall'alto verso il basso.
Non ho trovato un metodo che utilizzo nei commenti, quindi lo condividerò (penso solo Vim):
Ciò è utile quando non si desidera modificare le impostazioni di rientro / tabulazione vimrc
o ricordare di modificarle durante la modifica.
Per dissentire uso lo stesso blocco Ctrl+ Vseleziona per selezionare gli spazi ed eliminarlo con D.
Non so perché sia così difficile trovare una risposta semplice come questa ...
Io stesso ho dovuto lottare molto per saperlo. È molto semplice:
.vimrc
file nella home directory.Aggiungi questa linea
set cindent
nel file in cui si desidera rientrare correttamente.
In modalità normale / comando digitare
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
Per esempio,
14,21> shifts line number 14 to 21 to one tab
Aumenta il simbolo '>' per altre schede.
Per esempio,
14,21>>> for three tabs
:set number
per attivare / disattivare i numeri di riga (sono disattivati per impostazione predefinita) o inserire set number
vimrc.
Usando molto Python, mi ritrovo a dover ricorrere spesso a 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 del>
Ad esempio, V5j3>
indenterà cinque righe tre volte, ovvero 12 spazi se si utilizzano quattro spazi per i rientri.
Opzione 1: rientro di un blocco di codice in vi su tre spazi con modalità Visual Block:
Seleziona il blocco di codice che desideri rientrare. Fatelo usando Ctrl+Vin modalità normale e freccia in giù per selezionare il testo. Mentre è selezionato, inserisci :
per dare un comando al blocco del testo selezionato.
Nella riga di comando verrà visualizzato quanto segue: :'<,'>
Per impostare il rientro su tre spazi, digitare le 3
e premere Invio. Questo è ciò che appare::'<,'>le 3
Il testo selezionato viene immediatamente rientrato in tre spazi.
Opzione 2: rientro di un blocco di codice in vi su tre spazi con modalità Visual Line:
Essere in modalità normale e premere i seguenti tasti:
Vjjjj:le 3
Interpretazione di ciò che hai fatto:
V
significa iniziare a selezionare il testo.
jjjj
frecce in giù di quattro righe, evidenziando quattro righe.
:
dice a vi inserirete un'istruzione per il testo evidenziato.
le 3
indica il rientro del testo evidenziato di tre righe.
Il codice selezionato viene immediatamente aumentato o ridotto a un rientro di tre spazi.
Opzione 3: utilizzare la modalità Visual Block e la modalità di inserimento speciale per aumentare il rientro:
In modalità normale, premere i seguenti tasti:
Ctrl+V
jjjj
(premi la barra spaziatrice cinque volte)
Esc Shift+i
Tutto il testo evidenziato è rientrato di altri cinque spazi.
Uso la selezione visiva in modalità blocco:
I
( Shift+ I) per accedere alla modalità di inserimento.Questo non è un uni-tasker. Funziona:
c
invece di I
).vim-prettier
posto del motore di rientro predefinito). In caso >
contrario, l' utilizzo risulterebbe reale nella formattazione eseguita da Prettier.
Per indentare tutti i file per quattro:
esc 4G=G
Fonte: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html