Snel meerdere regels laten inspringen in vi

Het zou triviaal moeten zijn, en het zou zelfs in de Help kunnen staan, maar ik weet niet hoe ik erin moet navigeren. Hoe kan ik meerdere regels snel laten inspringen in vi?


Antwoord 1, autoriteit 100%

Gebruik de opdracht >. Om vijf regels te laten inspringen, 5>>. Om een regelblok te markeren en te laten inspringen, Vjj>om drie regels te laten inspringen (alleen Vim ). Als u een accoladeblok wilt laten inspringen, plaatst u de cursor op een van de accolades en gebruikt u >%of gebruikt u >iB.

Als je tekstblokken kopieert en de inspringing van een blok op de nieuwe locatie moet uitlijnen, gebruik dan ]pin plaats van alleen p . Dit lijnt het geplakte blok uit met de omringende tekst.

Ook de instelling shiftwidthstelt u in staat om te bepalen hoeveel spaties u wilt laten inspringen.


Antwoord 2, autoriteit 37%

Dit antwoord vat de andere antwoorden en opmerkingen van deze vraag samen en voegt extra informatie toe op basis van de Vim-documentatieen de Vim-wiki. Voor de beknoptheid maakt dit antwoord geen onderscheid tussen Vi en Vim-specifieke commando’s.

In de onderstaande opdrachten betekent “opnieuw inspringen” “regels inspringen volgens uw inspringingsinstellingen.” shiftwidthis de primaire variabele die de inspringing.

Algemene commando’s

>>   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

U kunt {vervangen door }of B, b.v. =iBis een geldige opdracht voor blokinspringen. Kijk eens naar “Inspringen een codeblok” voor een mooi voorbeeld om deze commando’s uit te proberen.

Onthoud ook dat

.    Repeat last command

, dus inspringende opdrachten kunnen eenvoudig en gemakkelijk worden herhaald.

RE-INTENTING COMPLETE-bestanden

Er is een andere gemeenschappelijke situatie vereist dat inspringing in een bronbestand is vastgesteld:

gg=G  Re-indent entire buffer

U kunt dit idee uitbreiden naar meerdere bestanden:

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

of meerdere buffers:

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

in de visuele modus

Vjj> Visually mark and then indent three lines

in invoegmodus

Deze opdrachten zijn van toepassing op de huidige regel:

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

EX-opdrachten

Deze zijn handig wanneer u een specifiek scala aan lijnen wilt inspringen, zonder uw
cursor.

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

Indenting Met Markers

Een andere aanpak is via markers :

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

… verplaats de cursor naar de eindlocatie

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

Variabelen die inspringen regelen

U kunt deze in uw .vimrc bestand .

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 heeft intelligente inkeping op basis van filetype. Probeer dit toe te voegen aan uw .vimrc:

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

referenties


Antwoord 3, autoriteit 5%

Een grote selectie zou zijn:

gg=G

Het is echt snel en alles wordt ingesprongen 😉


Antwoord 4, autoriteit 4%

Probeer dit ook voor C-inspringeninspringen. Doe :help =voor meer informatie:

={

Dat zal het huidige codeblok waarin je je bevindt automatisch inspringen.

Of gewoon:

==

om de huidige regel automatisch in te laten springen.


Antwoord 5, autoriteit 3%

Toetsindrukken voor meer visuele mensen:

  1. Ga naar de opdrachtmodus:
    Ontsnappen

  2. Ga naar het begin van het gebied om in te springen:
    hjkl

  3. Start een blok:
    v

  4. Ga naar het einde van het gebied om in te springen:
    hjkl

  5. (Optioneel) Typ het aantal gewenste inspringniveaus
    0..9

  6. Voer de inspringing op het blok uit:
    >


Antwoord 6, autoriteit 3%

De meester van alle commando’s is

gg=G

Hiermee springt het hele bestand in!

En hieronder staan enkele van de eenvoudige en elegante commando’s die worden gebruikt om regels snel te laten inspringen in Vim of gVim.

De huidige regel laten inspringen

==

Alle regels onder de huidige regel laten inspringen

=G

Om nregels onder de huidige regel te laten inspringen

n==

Bijvoorbeeld 4 regels onder de huidige regel laten inspringen

4==

Als u een codeblok wilt laten inspringen, gaat u naar een van de accolades en gebruikt u het commando

=%

Dit zijn de eenvoudigste, maar krachtige commando’s om meerdere regels te laten inspringen.


Antwoord 7, autoriteit 3%

In aanvulling op het antwoord dat al is gegevenen is geaccepteerd , is het ook mogelijk om een markering te plaatsen en vervolgens alles van de huidige cursor tot de markering te laten inspringen.

Voer dus main waar je de bovenkant van je ingesprongen blok wilt hebben, cursor zo ver naar beneden als je nodig hebt en typ dan >'a(merk op dat “a” kan worden vervangen door een geldige markeringsnaam). Dit is soms makkelijker dan 5>>of vjjj>.


Antwoord 8

Ga naar het begin van de tekst

  • druk op vvoor visuele modus.
  • gebruik de pijl omhoog/omlaagom tekst te markeren.
  • druk op =om alle regels die u hebt gemarkeerd te laten inspringen.

Antwoord 9

Als je een blok selecteert en >gebruikt om in te springen, springt het in en keert het terug naar de normale modus. Ik heb dit in mijn .vimrc-bestand:

vnoremap < <gv
vnoremap > >gv

Hiermee kunt u uw selectie zo vaak laten inspringen als u wilt.


Antwoord 10

Naast de aangeboden oplossingen, doe ik dingen graag alinea voor alinea met >}


Antwoord 11

Stel dat u 2 spaties gebruikt om uw code te laten inspringen. Typ:

:set shiftwidth=2
  • Typ v(om de visuele blokbewerkingsmodus te openen)
  • Verplaats de cursor met de pijltjestoetsen (of met h/j/k/l) naar markeer de regels die u wilt laten in- of uitspringen.

Dan:

  • Type & GT; om eenmaal (2 spaties) in te schakelen.
  • Type 2 & GT; om twee keer (4 spaties) in te schatten.
  • type 3 & GT; om driemaal (6 spaties) in te schatten.
  • ...
  • Type & LT; tot ongezette één keer (2 spaties).
  • Type 2 & LT; tot oneindigd tweemaal (4 spaties).
  • Type 3 & LT; naar ongezette driemaal (6 spaties).
  • ...

u krijgt het idee.

(lege lijnen worden niet ingesprongen, wat ik denk dat het een beetje leuk is. )


Ik heb het antwoord gevonden in de (g) VIM-documentatie voor inspringende blokken:

:help visual-block
/indent

Als u een telling wilt geven aan de opdracht, doe dit dan net voordat u typt
The Operator-teken: "V {verplaatsen-around} 3 & GT;" (Verplaats lijnen 3 streepjes naar
rechts).


Antwoord 12

U kunt de opdracht norm igebruiken om bepaalde tekst aan het begin van de regel in te voegen. Om 10 spaties voor regels 2-10 in te voegen:

:2,10norm 10i 

Onthoud dat er een spatie aan het einde van de opdracht moet staan - dit is het teken dat we willen invoegen. We kunnen een regel ook laten inspringen met elke andere tekst, bijvoorbeeld om elke regel in een bestand met vijf onderstrepingstekens te laten inspringen:

:%norm 5i_

of iets nog meer luxe:

:%norm 2i[ ]

Meer praktisch voorbeeld is een commentaar van bash / python / etc-code met # karakter:

:1,20norm i#

Gebruik X in plaats van I . Om eerst 5 tekens uit elke regel te verwijderen:

:%norm 5x

13

Doe dit:

$vi .vimrc

en voeg deze regel toe:

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

Dit is alleen voor een CPP-bestand. U kunt dit doen voor een ander bestandstype, ook gewoon door het modificeren van de Filetype ...


14

Een snelle manier om dit te doen met VISUAL MODEgebruikt hetzelfde proces als een reactie van een blok code.

Dit is handig als u de voorkeur geeft aan uw shiftwidthof gebruik een setrichtlijnen en is flexibel genoeg om te werken met tabbladen of spaties of een ander teken.

  1. Positiecursor aan het begin op het blok
  2. V om over te schakelen naar -- VISUAL MODE --
  3. Selecteer de tekst die moet worden ingesprongen
  4. Type :om over te schakelen naar de prompt
  5. Vervangen met 3 toonaangevende ruimtes:

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

  6. of vervanging met toonaangevende tabbladen:

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

  7. KORTE UITLEG:

    '<,'>- binnen het visueel geselecteerde bereik

    s/^/ /g- voeg 3 spaties in het begin van elke regel binnen het hele bereik

    (of)

    s/^/\t/g- INSERT TabAan het begin van elke regel binnen het gehele bereik


15

>}OF >{INKEND VAN DE HUIDIGE LINE UIT NAAR Volgende paragraaf

<}of <{zelfde inspringing ongedaan maken


Antwoord 16

:line_num_start,line_num_end>

Bijvoorbeeld

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

Verhoog de '>' symbool voor meer tabbladen.

Bijvoorbeeld

14,21>>> for three tabs

Antwoord 17

Ik markeer graag tekst voor inspringing:

  1. ga naar het begin van de tekstregel en typ ma(ais het label van de 'm'ark: het zou kunnen elke letter)
  2. ga naar de laatste tekstregel en typ mz(opnieuw, zkan elke letter zijn)
  3. :'a,'z>of :'a,'z<zal inspringen of uitspringen (is dit een woord?)
  4. Voila! De tekst wordt verplaatst (lege regels blijven leeg zonder spaties)

PS: u kunt de techniek :'a,'zgebruiken om een bereik te markeren voor elke bewerking (d, y, s///, enz.) waarbij u lijnen, getallen kunt gebruiken , of %.


Antwoord 18

Voor mij was de MacVim (Visual) oplossing: selecteer met de muis en druk op ">", maar nadat ik de volgende regels in "~/.vimrc" had gezet, aangezien ik van spaties houd in plaats van tabs:

set expandtab
set tabstop=2
set shiftwidth=2

Het is ook handig om MacVim te kunnen aanroepen vanaf de opdrachtregel (Terminal.app), dus aangezien ik de volgende helperdirectory "~/bin" heb, waar ik een script met de naam "macvim" plaats:

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

En natuurlijk in "~/.bashrc":

export PATH=$PATH:$HOME/bin

MacPortsknoeit veel met "~/.profile", dus de PATH-omgevingsvariabele kan behoorlijk lang worden.


Antwoord 19

:help left

In ex modekunt u :leftof :legebruiken om regels met een bepaald aantal uit te lijnen.
Specifiek, :leftzal Links lijnen in het [bereik] uitlijnen. Het zet de inspringing in de regels op [inspringen] (standaard 0).

:%le3of :%le 3of :%left3of :%left 3worden uitgelijnd het hele bestand door drie spaties op te vullen.

:5,7 le 3lijnt de regels 5 tot en met 7 uit door ze op te vullen met drie spaties.

:lezonder enige waarde of :le 0wordt links uitgelijnd met een opvulling van 0.

Dit werkt in Vim en gVim.


Antwoord 20

5==springt vijf regels in vanaf de huidige cursorpositie.

Je kunt dus elk nummer typen vóór ==. Het zal het aantal regels inspringen. Dit is in de opdrachtmodus.

gg=Gzal het hele bestand van boven naar beneden inspringen.


Antwoord 21

Ik heb geen methode gevonden die ik gebruik in de reacties, dus ik zal het delen (ik denk alleen Vim):

  1. Escom de opdrachtmodus te openen
  2. Ga naar het eerste teken van de laatste regel die u wilt laten inspringen
  3. Ctrl+ Vom blokselectie te starten
  4. Ga naar het eerste teken van de eerste regel die u wilt laten inspringen
  5. Shift+ Iom naar de speciale invoegmodus te gaan
  6. Typ zoveel spatie/tabs als je nodig hebt om te laten inspringen (twee bijvoorbeeld
  7. Druk op Escen er verschijnen spaties in alle regels

Dit is handig als u de instellingen voor inspringen/tabbladen in vimrcniet wilt wijzigen of als u ze wilt onthouden om het tijdens het bewerken te wijzigen.

Om het inspringen ongedaan te maken gebruik ik hetzelfde Ctrl+ Vblok, selecteer om spaties te selecteren en verwijder het met D.


Antwoord 22

Ik weet niet waarom het zo moeilijk is om een ​​eenvoudig antwoord zoals deze te vinden ...

Ik moest zelf veel moeite hebben om dit te weten. Het is heel eenvoudig:

  • Bewerk uw .vimrcbestand onder de thuisgids.
  • Voeg deze regel toe

    set cindent
    

    in uw bestand waar u goed wilt inspringen.

  • In normaal / opdrachtmodus

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

23

Om elke regel in een bestandstype in te steken, ESC en vervolgens G = GG .


24

Ik gebruik Block-Mode Visuele selectie:

  • Ga naar de voorkant van het blok om te bewegen (aan de boven- of onderkant).
  • Druk op CTRL + V om de Visual Block-modus in te voeren.
  • Navigeer om een ​​kolom voor de regels te selecteren.
  • Druk op I(SHIFT + I ) om de invoegmodus in te voeren.
  • typ enkele ruimtes.
  • Druk op ESC . Alle lijnen zullen verschuiven.

Dit is geen uni-taskor. Het werkt:

  • in het midden van de lijnen.
  • om een ​​reeks op alle lijnen in te voegen.
  • Om een ​​kolom te wijzigen (gebruik cin plaats van I).
  • yank, wis, substituut, enz ...

25

  • voor een blok van code, {}: = + %

  • Voor een geselecteerde regel: Shift+ vselecteer met de pijltoetsen omhoog/omlaag en druk vervolgens op =.

  • Voor het hele bestand: gg+ =+ G

Opmerking: 'gg' betekent ga naar regel 1, '=' is de inspringopdracht en 'G' verplaatst de cursor naar het einde van het bestand.


Antwoord 26

Hoe gemarkeerde code in vi onmiddellijk een aantal spaties inspringen:

Optie 1: laat een codeblok in vi tot drie spaties inspringen met de modus Visueel blokkeren:

  1. Selecteer het codeblok dat u wilt laten inspringen. Doe dit met Ctrl+Vin de normale modus en met de pijl omlaag om tekst te selecteren. Terwijl het is geselecteerd, voert u :in om een opdracht te geven aan het blok geselecteerde tekst.

  2. Het volgende verschijnt in de opdrachtregel: :'<,'>

  3. Als u de inspringing op drie spaties wilt instellen, typt u le 3en drukt u op enter. Dit is wat er verschijnt: :'<,'>le 3

  4. De geselecteerde tekst springt onmiddellijk in met drie spaties.

Optie 2: laat een codeblok in vi inspringen tot drie spaties met de visuele lijnmodus:

  1. Open je bestand in vi.
  2. Plaats je cursor op een code
  3. Ga in de normale modus en druk op de volgende toetsen:

    Vjjjj:le 3
    

    Interpretatie van wat je hebt gedaan:

    Vbetekent beginnen met het selecteren van tekst.

    jjjjpijlt vier regels omlaag en markeert vier regels.

    :vertelt vi dat je een instructie voor de gemarkeerde tekst moet invoeren.

    le 3betekent gemarkeerde tekst drie regels laten inspringen.

    De geselecteerde code wordt onmiddellijk verhoogd of verlaagd tot een inspringing van drie spaties.

Optie 3: Gebruik de visuele blokmodus en de speciale insteekmodus om het streepje te verhogen:

  1. Open uw bestand in VI.
  2. Zet uw cursor over een code
  3. Wees in de normale modus Druk op de volgende toetsen:

    CTRL + V

    jjjj
    

    (druk vijf keer op de spatiebalk)

    ESC
    SHIFT + I

    Alle gemarkeerde tekst is nog vijf ruimtes ingesprongen.


27

  1. Druk op "Shift + V" om de Visual Line-modus in te voeren.
  2. Selecteer de tekst die u wilt intent, maar met behulp van de cursortoetsen of de toetsen "J" en "K".
  3. om rechts te inspringen Druk op "SHIFT + DOT" (& GT; KARAKTER).
    Links inspringen Druk op "SHIFT + COMMA" (& LT; TARAGEN).

Bron: https : //www.fir3net.com/unix/general/how-do-i-tab-multiple-lines-within-vi.html


28

Al het bestand inspringen op vier:

esc 4G=G

Other episodes