Indentasi beberapa baris dengan cepat di vi

2158

Itu seharusnya sepele, dan bahkan mungkin bisa membantu, tapi saya tidak tahu bagaimana menavigasi itu. Bagaimana cara indentasi beberapa baris dengan cepat di vi?

Allain Lalonde
sumber

Jawaban:

2552

Gunakan >perintah. Untuk indentasi lima baris 5>>,. Untuk menandai blok garis dan membuat indentasi, Vjj>untuk indentasi tiga baris (hanya Vim). Untuk membuat indentasi blok kurung kurawal, letakkan kursor Anda di salah satu kurung kurawal dan gunakan >%atau dari mana pun di dalam blok yang digunakan >iB.

Jika Anda menyalin blok teks di sekitar dan perlu menyelaraskan indentasi blok di lokasi yang baru, gunakan ]pbukan hanya p. Ini menyelaraskan blok yang ditempelkan dengan teks di sekitarnya.

Selain itu, shiftwidthpengaturan ini memungkinkan Anda untuk mengontrol berapa banyak ruang untuk inden.

Greg Hewgill
sumber
77
Saya menggunakan> i} (indentasi {} blok). Bekerja di vim. Tidak yakin itu berfungsi di vi.
R. Martinho Fernandes
11
Masalah saya (di gVim) adalah bahwa perintah> indentasi lebih dari 2 kosong (saya ingin hanya dua kosong> tetapi indentasi sesuatu seperti 5 kosong)
Kamran Bigdely
28
@ Kamran: Lihat shiftwidthpengaturan cara untuk mengubahnya.
Greg Hewgill
4
@MattStevens: Anda dapat menemukan diskusi panjang tentang fenomena ini di sini: meta.stackexchange.com/questions/9731/…
Greg Hewgill
5
Saya sering membuat inden blok visual beberapa kali berturut-turut, seperti memperbaiki beberapa tag yang disisipkan ke file XML. Daripada memilih kembali blok dalam mode visual setiap kali, orang dapat menggunakan 'gv' untuk menggunakan kembali blok visual terakhir. Referensi superuser.com/questions/220666/…
David Mann
958

Jawaban ini merangkum jawaban dan komentar lain dari pertanyaan ini, dan menambahkan informasi tambahan berdasarkan dokumentasi Vim dan wiki Vim . Untuk keringkasan, jawaban ini tidak membedakan antara perintah khusus Vi dan Vim.

Pada perintah di bawah ini, "indentasi ulang" berarti "baris indentasi sesuai dengan pengaturan indentasi Anda ." shiftwidthadalah variabel utama yang mengontrol indentasi.

Perintah Umum

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

Anda dapat mengganti {dengan }atau B, misalnya =iBperintah indentasi blok yang valid. Lihatlah "Indent a Code Block" untuk contoh yang bagus untuk mencoba perintah ini.

Juga, ingat itu

.    Repeat last command

, jadi perintah indentasi dapat dengan mudah dan nyaman diulang.

Mengindentifikasi kembali file yang lengkap

Situasi umum lainnya adalah membutuhkan lekukan untuk diperbaiki di seluruh file sumber:

gg=G  Re-indent entire buffer

Anda dapat memperluas gagasan ini ke banyak file:

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

Atau beberapa buffer:

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

Dalam Mode Visual

Vjj> Visually mark and then indent three lines

Dalam mode sisipkan

Perintah ini berlaku untuk baris saat ini:

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

Mantan perintah

Ini berguna ketika Anda ingin membuat indentasi rentang garis tertentu, tanpa menggerakkan kursor Anda.

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

Indentasi menggunakan spidol

Pendekatan lain adalah melalui spidol :

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

... pindahkan kursor ke akhir lokasi

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

Variabel yang mengatur lekukan

Anda dapat mengatur ini di file .vimrc Anda .

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 memiliki indentasi cerdas berdasarkan filetype. Coba tambahkan ini ke .vimrc Anda:

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

Referensi

ire_and_curses
sumber
13
Baik jawaban ini maupun jawaban di atas sangat bagus. Tapi saya memberi ini +1 karena mengingatkan saya pada operator 'titik', yang mengulangi perintah terakhir. Ini sangat berguna ketika perlu membuat indentasi seluruh blok pada beberapa ruang shift (atau indentasi) tanpa perlu terus menekan >}. Terima kasih banyak
Amit
1
5 >> Indent 5 lines: Perintah ini membuat indentasi baris kelima , bukan 5 baris. Mungkinkah ini karena pengaturan VIM saya, atau apakah kata-kata Anda salah?
Wipqozn
1
@Wipqozn - Aneh. Ini jelas indentasi lima baris berikutnya untuk saya, diuji pada Vim 7.2.330.
ire_and_curses
8
> 42gg ​​Indent dari tempat Anda berada di jalur 42.
Steve
Ringkasan hebat! Perhatikan juga bahwa "indent inside block" dan "indent all block" (<i {> a {etc.) juga berfungsi dengan tanda kurung dan tanda kurung:> a (<i] dll. (Dan saat saya sedang mengerjakannya, di Selain <>, mereka juga bekerja dengan d, c, y dll.)
aqn

123

Pilihan besar adalah:

gg=G

Ini sangat cepat, dan semuanya mendapat indentasi ;-)


1
Saya memiliki file XML dan menyalakan penyorotan sintaks. Mengetik gg=Ghanya menempatkan setiap baris mulai dari posisi 1. Semua spasi putih telah dihapus. Apakah ada hal lain yang spesifik untuk XML?
asgs

2
Saya pikir set cindentharus di vimrc atau harus dijalankan :set cindentsebelum menjalankan perintah itu
Amanuel Nega

3
Saya pikir cindent harus ditetapkan terlebih dahulu. dan @gs saya pikir ini hanya berfungsi untuk bahasa pemrograman cstyle.
Amanuel Nega

110

Coba juga ini untuk indentasi C-indentasi . Lakukan :help =untuk informasi lebih lanjut:

={

Itu akan membuat inden inden pada blok kode Anda saat ini.

Atau hanya:

==

untuk indentasi otomatis pada baris saat ini.


2
tidak bekerja untuk saya, hanya membuang kursor saya ke baris di atas tanda kurung buka 'blok kode saat ini saya berada di'.
underscore_d

79

Penekanan kunci untuk lebih banyak orang visual:

  1. Masuk ke Mode Perintah:
    Escape

  2. Bergerak ke awal area untuk indentasi:
    hjkl

  3. Mulai blok:
    v

  4. Bergeraklah ke ujung area untuk indentasi:
    hjkl

  5. (Opsional) Ketikkan jumlah level indentasi yang Anda inginkan
    0..9

  6. Jalankan indentasi pada blok:
    >


2
Ini bagus, tetapi menggunakan spasi dan bukan tab. Adakah cara untuk memperbaikinya?
Shane Reustle

12
Jika menggunakan spasi alih-alih tab, maka ini mungkin karena Anda memiliki lekukan yang diatur untuk menggunakan spasi. =).
Kent Fredric

4
Ketika opsi 'expandtab' mati (ini adalah default) Vim menggunakan <Tab> s sebanyak mungkin untuk membuat indentasi. (: tolong:>)
Kent Fredric

1
Satu-satunya pengaturan vim terkait tab / spasi yang telah saya ubah adalah: set tabstop = 3. Ini sebenarnya memasukkan ini setiap kali saya menggunakan >>: "<tab> <spasi> <spasi>". Sama dengan indentasi blok. Ada ide?
Shane Reustle

3
Tiga pengaturan yang ingin Anda lihat untuk "spasi vs tab" adalah 1. tabstop 2. shiftwidth 3. Expandtab. Anda mungkin memiliki "shiftwidth = 5 noexpandtab", jadi "tab" adalah 3 spasi, dan level indentasi adalah "5" spasi, jadi itu membentuk 5 dengan 1 tab, dan 2 spasi.
Kent Fredric

66

Tuan dari semua perintah adalah
gg=G

Ini indentasi seluruh file!

Dan di bawah ini adalah beberapa perintah sederhana dan elegan yang digunakan untuk membuat garis cepat di Vim atau gVim.

Untuk indentasi baris saat ini
==

Untuk membuat indentasi semua baris di bawah baris saat ini

=G

Untuk membuat ngaris di bawah garis saat ini

n==

Misalnya, untuk membuat indentasi 4 baris di bawah baris saat ini

4==

Untuk membuat indentasi blok kode, buka salah satu kawat gigi dan gunakan perintah

=%

Ini adalah perintah paling sederhana, namun kuat untuk membuat indentasi beberapa baris.


3
Ini hanya masuk vim, bukan vi.
rojomoke

3
Tidak pada kotak Solaris atau AIX saya tidak. Kunci sama dengan selalu menjadi salah satu tugas makro ad hoc standar saya. Apakah Anda yakin tidak melihat vimyang ditautkan vi?
rojomoke

3
Ya, di Linux, vi hampir selalu merupakan tautan ke vim. Coba jalankan perintah: ve di dalam vi.
rojomoke

4
Saya suka jawaban seperti ini: jelas, tepat dan ringkas. Bekerja untuk saya di Debian Jessie. Terima kasih, @SJain
digitai

1
Karena saya menggunakan vim, bukan vi, cukup bersemangat jawaban ini ada di sini. Terima kasih.
Dan Nissenbaum

66

Selain jawaban yang telah diberikan dan diterima, dimungkinkan juga untuk menempatkan penanda dan kemudian memasukkan segala sesuatu dari kursor saat ini ke penanda tersebut.

Dengan demikian, masukkan di mamana Anda ingin bagian atas blok indentasi Anda, kursor ke bawah sejauh yang Anda butuhkan dan kemudian ketik >'a(perhatikan bahwa " a" dapat diganti dengan nama penanda yang valid). Ini terkadang lebih mudah daripada 5>>atau vjjj>.


1
Ini sangat berguna. Saya harus melihat apa yang bekerja dengan ini. Saya tahu d'a dan y'a, apa lagi?
user606723

2
Ini sangat berguna karena tidak perlu menghitung berapa banyak baris yang ingin Anda indentasi.
ziggy

29

Pergi ke awal teks

  • tekan vuntuk mode visual.
  • gunakan up/ downpanah untuk menyorot teks.
  • tekan =untuk indentasi semua baris yang Anda sorot.

28

Serta solusi yang ditawarkan, saya suka melakukan hal-hal paragraf sekaligus >}


2
Yup, dan inilah sebabnya salah satu kencing besar saya adalah ruang putih pada baris kosong: mereka mengacaukan gagasan vim tentang "paragraf".
aqn

28

Ketika Anda memilih blok dan digunakan >untuk indentasi, itu indentasi kemudian kembali ke mode normal. Saya memilikinya di file .vimrc saya:

vnoremap < <gv

vnoremap > >gv

Ini memungkinkan Anda indentasi pilihan Anda sebanyak yang Anda inginkan.


17
Untuk indentasi pemilihan beberapa kali, Anda cukup menekan. untuk mengulangi perintah sebelumnya.
sundar - Reinstate Monica

2
Masalah dengan. dalam situasi ini Anda harus menggerakkan jari-jari Anda. Dengan solusi @ mike (yang sama dengan yang saya gunakan), Anda sudah mendapatkan jari Anda pada tombol indentasi dan hanya dapat terus menekannya untuk terus membuat indentasi daripada beralih dan melakukan sesuatu yang lain. Menggunakan periode membutuhkan waktu lebih lama karena Anda harus menggerakkan tangan Anda dan itu memerlukan lebih banyak pemikiran karena itu adalah operasi kedua yang berbeda.
masukomi

21

Misalkan Anda menggunakan 2 spasi untuk membuat indentasi kode Anda. Tipe:

:set shiftwidth=2
  • Ketik v(untuk masuk ke mode pengeditan blok visual)
  • Gerakkan kursor dengan tombol panah (atau dengan h/ j/ k/ l) untuk menyorot garis yang ingin Anda lekukan atau lekukan.

Kemudian:

  • Tipe > untuk indentasi sekali (2 spasi).
  • Tipe 2> untuk indentasi dua kali (4 spasi).
  • Ketik 3>untuk indentasi tiga kali (6 spasi).
  • ...
  • Ketik <untuk menghapuskan sekali (2 spasi).
  • Ketik 2<unindent dua kali (4 spasi).
  • Ketik 3<tiga kali indenten (6 spasi).
  • ...

Anda mendapatkan idenya.

( Baris kosong tidak akan mendapatkan indentasi, yang menurut saya agak baik. )


Saya menemukan jawabannya dalam dokumentasi (g) vim untuk indentasi blok:

:help visual-block
/indent

Jika Anda ingin memberikan hitungan pada perintah, lakukan ini tepat sebelum mengetikkan karakter operator: "v {move-around} 3>" (pindahkan baris 3 indentasi ke kanan).

John Sonderson
2
Saya akan mengatakan bahwa vi / vim sebagian besar konsisten. Misalnya, D tidak berperilaku sama dengan S dan Y! :)
aqn
1
ini dimulai dari sisi kiri file ... bukan posisi blok saat ini
Eliethesaiyan
1
Luar biasa, hanya apa yang saya cari (cara untuk memasukkan jumlah spasi tertentu - 4 spasi untuk kode penurunan harga - untuk mengganti indentasi normal saya). Dalam kasus saya, saya ingin membuat indentasi sejumlah garis dalam mode visual, jadi shift-v untuk menyorot garis, lalu :'<,'>le4untuk memasukkan spasi. Terima kasih!
Subfuzion
1
Jelas ada banyak cara untuk menyelesaikan ini, tetapi ini adalah yang paling mudah untuk diterapkan, karena nomor baris ditampilkan secara default di vim dan tidak memerlukan matematika.
HoldOffHunger
@HoldOffHunger Baris nomor tidak ditampilkan secara default. Anda perlu menggunakan :set numberuntuk mengganti nomor baris (mereka dinonaktifkan secara default), atau memasukkan set numbervimrc Anda.
DryLabRebel
Ini rumit, tetapi merupakan cara yang harus dilakukan jika Anda memformat di luar core VIM (misalnya, menggunakan vim-prettieralih-alih mesin indentasi default). Dengan menggunakan cara >lain akan secara meremehkan pemformatan yang dilakukan oleh Prettier.
oligofren
Lucu, saya menemukan itu tidak rumit. Ini bukan uni-tasker! Mempelajari metode ini memiliki banyak kegunaan di luar indentasi.
sqqqrly
Saya merasa lebih baik daripada jawaban yang diterima, karena saya bisa melihat apa yang terjadi, garis yang saya pilih dan tindakan yang saya lakukan, dan bukan hanya mengetik semacam mantra vim.
user4052054
3
...apa? 'indentasi oleh 4 spasi'? Tidak, ini melompat ke baris 4 dan kemudian membuat indentasi semuanya dari sana hingga akhir file, menggunakan mode indentasi yang saat ini dipilih (jika ada).
underscore_d
18

Keindahan UI Vim adalah konsistensinya. Perintah pengeditan terdiri dari perintah dan gerakan kursor. Gerakan kursor selalu sama:

  • Hke atas layar, Lke bawah, Mke tengah
  • nG untuk pergi ke baris n , Gsendirian ke bagian bawah file, ggke atas
  • nuntuk pindah ke kecocokan pencarian berikutnya, Nke sebelumnya
  • } ke akhir paragraf
  • % ke braket pencocokan berikutnya, baik dari tanda kurung atau jenis tag
  • enter ke baris berikutnya
  • 'xuntuk menandai x di mana x adalah huruf atau lainnya '.
  • banyak lagi, termasuk wdan Wuntuk kata, $atau 0ke ujung garis, dll., yang tidak berlaku di sini karena bukan gerakan garis .

Jadi, untuk menggunakan vim Anda harus belajar untuk memindahkan kursor dan mengingat repertoar perintah seperti, misalnya, >untuk indentasi (dan< "outdent").

Jadi, untuk indentasi garis-garis dari posisi kursor ke bagian atas layar yang Anda lakukan >H, >Guntuk indentasi ke bagian bawah file.

Jika, alih-alih mengetik >H, Anda mengetik dHmaka Anda menghapus blok garis yang sama, cHuntuk menggantinya, dll.

Beberapa gerakan kursor lebih cocok dengan perintah tertentu. Secara khusus, %perintah ini berguna untuk membuat indentasi seluruh blok HTML atau XML. Jika file memiliki sintaks yang disorot ( :syn on) maka atur kursor dalam teks tag (seperti, dalam "i" dari <div> dan memasukkan>% akan hingga tag </div> penutup.

Ini adalah cara kerja Vim: kita harus mengingat hanya gerakan kursor dan perintah, dan bagaimana mencampurnya. Jadi jawaban saya untuk pertanyaan ini adalah "pergi ke salah satu ujung blok baris yang ingin Anda indentasi, dan kemudian ketik >perintah dan gerakan ke ujung lain dari blok" jika indent diartikan sebagai menggeser garis, =jika indentasi ditafsirkan sebagai dalam pencetakan cantik.

Juan Lanus
sumber
2
Saya akan mengatakan bahwa vi / vim sebagian besar konsisten. Misalnya, D tidak berperilaku sama dengan S dan Y! :)
aqn
14

Melakukan hal ini:

$vi .vimrc

Dan tambahkan baris ini:

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

Ini hanya untuk file cpp. Anda dapat melakukan ini untuk jenis file lain, juga hanya dengan memodifikasi jenis file ...

pankaj ukumar
sumber
13

Anda dapat menggunakan norm iperintah untuk menyisipkan teks yang diberikan di awal baris. Untuk memasukkan 10 spasi sebelum baris 2-10:

:2,10norm 10i 

Ingatlah bahwa harus ada karakter spasi di akhir perintah - ini akan menjadi karakter yang ingin kita masukkan. Kami juga dapat membuat indentasi baris dengan teks lain, misalnya untuk indentasi setiap baris dalam file dengan lima karakter garis bawah:

:%norm 5i_

Atau sesuatu yang lebih mewah:

:%norm 2i[ ]

Contoh yang lebih praktis adalah mengomentari kode Bash / Python / etc dengan karakter #:

:1,20norm i#

Untuk menggunakan kembali indentasi xalih-alih i. Misalnya, untuk menghapus 5 karakter pertama dari setiap baris:

:%norm 5x
Nykakin
sumber
1
ini dimulai dari sisi kiri file ... bukan posisi blok saat ini
Eliethesaiyan
12

Cara cepat untuk melakukan ini menggunakan VISUAL MODE proses yang sama dengan mengomentari blok kode.

Ini berguna jika Anda memilih untuk tidak mengubah shiftwidthatau menggunakan setarahan apa pun dan cukup fleksibel untuk bekerja dengan TABS atau SPACES atau karakter lainnya.

  1. Posisikan kursor di awal di blok
  2. v untuk beralih ke -- VISUAL MODE --
  3. Pilih teks yang akan diindentasi
  4. Ketik :untuk beralih ke prompt
  5. Mengganti dengan 3 spasi utama:

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

  6. Atau ganti dengan tab terkemuka:

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

  7. Penjelasan singkat:

    '<,'> - Dalam Rentang Terpilih Secara Visual

    s/^/ /g - Masukkan 3 spasi di awal setiap baris dalam seluruh rentang

    (atau)

    s/^/\t/g- Masukkan Tabdi awal setiap baris dalam seluruh rentang

Eric Kigathi
sumber
12

>} atau >{ inden dari baris saat ini hingga paragraf berikutnya

<}atau <{tidak-indentasi yang sama

Jash
sumber
11

Saya suka menandai teks untuk indentasi:

  1. pergi ke awal baris teks lalu ketik ma( aadalah label dari 'm'ark: bisa berupa huruf apa saja)
  2. pergi ke akhir baris teks dan ketik mz(sekali lagi, zbisa huruf apa saja)
  3. :'a,'z>atau :'a,'z<akan indent atau outdent (apakah ini sebuah kata?)
  4. Voila! Teks dipindahkan (baris kosong tetap kosong tanpa spasi)

PS: Anda dapat menggunakan :'a,'zteknik untuk menandai rentang untuk operasi apa pun (d, y, s ///, dll.) Di mana Anda dapat menggunakan garis, angka, atau %.

SteveO
sumber
10

:help left

Di ex modeAnda dapat menggunakan :leftatau :leuntuk menyelaraskan garis jumlah yang ditentukan. Secara khusus, Kiri:left akan menyelaraskan garis dalam [kisaran]. Ini mengatur indent pada baris ke [indent] (default 0).

:%le3atau :%le 3 atau :%left3atau :%left 3akan menyelaraskan seluruh file dengan melapisi dengan tiga spasi.

:5,7 le 3 akan menyelaraskan garis 5 hingga 7 dengan melapisinya dengan tiga ruang.

:le tanpa nilai atau :le 0 akan dibariskan rata dengan bantalan 0.

Ini berfungsi di Vim dan gVim.

zundarz
sumber
1
Luar biasa, hanya apa yang saya cari (cara untuk memasukkan jumlah spasi tertentu - 4 spasi untuk kode penurunan harga - untuk mengganti indentasi normal saya). Dalam kasus saya, saya ingin membuat indentasi sejumlah garis dalam mode visual, jadi shift-v untuk menyorot garis, lalu :'<,'>le4untuk memasukkan spasi. Terima kasih!
Subfuzion
9

Bagi saya, solusi MacVim (Visual) adalah, pilih dengan mouse dan tekan ">", tetapi setelah meletakkan baris berikut di "~ / .vimrc" karena saya lebih suka spasi daripada tab:

set expandtab
set tabstop=2
set shiftwidth=2

Juga berguna untuk dapat memanggil MacVim dari command-line (Terminal.app), jadi karena saya memiliki direktori pembantu berikut "~ / bin", tempat saya meletakkan skrip yang disebut "macvim":

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

Dan tentu saja di "~ / .bashrc":

export PATH=$PATH:$HOME/bin

MacPorts sering mengacaukan "~ / .profile", sehingga variabel lingkungan PATH bisa menjadi cukup lama.

mda
sumber
9

5== akan membuat indentasi lima baris dari posisi kursor saat ini.

Jadi, Anda dapat mengetikkan nomor apa pun sebelumnya ==. Ini akan membuat indentasi jumlah baris. Ini dalam mode perintah.

gg=G akan membuat indentasi seluruh file dari atas ke bawah.

rohitkadam19
sumber
9

Saya tidak menemukan metode yang saya gunakan di komentar, jadi saya akan membagikannya (saya pikir hanya Vim):

  1. Esc untuk masuk ke mode perintah
  2. Pindah ke karakter pertama dari baris terakhir yang ingin Anda indentasi
  3. Ctrl+ Vuntuk memulai blokir pilih
  4. Pindah ke karakter pertama dari baris pertama yang ingin Anda indentasi
  5. Shift+ Iuntuk masuk ke mode penyisipan khusus
  6. Ketikkan spasi / tab sebanyak yang Anda perlukan untuk indentasi (misalnya dua
  7. Tekan Escdan spasi akan muncul di semua baris

Ini berguna ketika Anda tidak ingin mengubah pengaturan lekukan / tab vimrcatau mengingatnya untuk mengubahnya saat mengedit.

Untuk melepas saya menggunakan Ctrl+ Vblok yang sama pilih untuk memilih spasi dan menghapusnya dengan D.

NickSoft
sumber
9

Saya tidak tahu mengapa sangat sulit untuk menemukan jawaban sederhana seperti ini ...

Saya sendiri harus banyak berjuang untuk mengetahui hal ini. Ini sangat sederhana:

  • Edit .vimrcfile Anda di bawah direktori home.
  • Tambahkan baris ini

    set cindent
    

    di file Anda di mana Anda ingin indentasi dengan benar.

  • Dalam tipe mode normal / perintah

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    
Kamlesh Karwande
sumber
8
:line_num_start,line_num_end>

Sebagai contoh,

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

Tambah simbol '>' untuk tab lainnya.

Sebagai contoh,

14,21>>> for three tabs
attaboyabhipro
sumber
1
Jelas ada banyak cara untuk menyelesaikan ini, tetapi ini adalah yang paling mudah untuk diterapkan, karena nomor baris ditampilkan secara default di vim dan tidak memerlukan matematika.
HoldOffHunger
@HoldOffHunger Baris nomor tidak ditampilkan secara default. Anda perlu menggunakan :set numberuntuk mengganti nomor baris (mereka dinonaktifkan secara default), atau memasukkan set numbervimrc Anda.
DryLabRebel
7

Menggunakan banyak Python, saya merasa perlu sering perlu menggeser blok oleh lebih dari satu indent. Anda dapat melakukan ini dengan menggunakan salah satu metode pemilihan blok, dan kemudian cukup masukkan jumlah indentasi yang ingin Anda lompati tepat sebelum>

Misalnya, V5j3>akan membuat indentasi lima baris tiga kali - yaitu 12 spasi jika Anda menggunakan empat spasi untuk indentasi.

John La Rooy
sumber
7

Untuk membuat indentasi setiap baris dalam jenis file, Esclalu G=gg.

kapil
sumber
6

Cara indentasi kode yang disorot di vi segera oleh sejumlah spasi:

Opsi 1: Indentasi blok kode di vi ke tiga spasi dengan mode Visual Block:

  1. Pilih blok kode yang ingin Anda indentasi. Lakukan ini menggunakan Ctrl+Vdalam mode normal dan panah ke bawah untuk memilih teks. Saat itu dipilih, masukkan :untuk memberikan perintah ke blok teks yang dipilih.

  2. Berikut ini akan muncul di baris perintah: :'<,'>

  3. Untuk mengatur indent ke tiga spasi, ketik le 3dan tekan enter. Inilah yang muncul::'<,'>le 3

  4. Teks yang dipilih segera dimasukkan ke dalam tiga spasi.

Opsi 2: Indentasi blok kode di vi ke tiga spasi dengan mode Visual Line:

  1. Buka file Anda di vi.
  2. Letakkan kursor Anda di atas beberapa kode
  3. Berada dalam mode normal dan tekan tombol berikut:

    Vjjjj:le 3
    

    Interpretasi atas apa yang Anda lakukan:

    V berarti mulai memilih teks.

    jjjj panah empat baris, menyoroti empat garis.

    : memberitahu vi Anda akan memasukkan instruksi untuk teks yang disorot.

    le 3 berarti indent teks yang disorot tiga baris.

    Kode yang dipilih segera ditingkatkan atau dikurangi menjadi lekukan tiga spasi.

Opsi 3: gunakan mode Blok Visual dan mode sisipan khusus untuk meningkatkan indentasi:

  1. Buka file Anda di vi.
  2. Letakkan kursor Anda di atas beberapa kode
  3. Berada dalam mode normal tekan tombol-tombol berikut:

    Ctrl+V

    jjjj
    

    (tekan bilah spasi lima kali)

    Esc Shift+i

    Semua teks yang disorot diberi indentasi lima ruang tambahan.

Eric Leschinski
sumber
6

Saya menggunakan pemilihan visual mode blok:

  • Pergi ke depan blok untuk bergerak (di bagian atas atau bawah).
  • Tekan Ctrl+V untuk memasuki mode blok visual.
  • Arahkan untuk memilih kolom di depan garis.
  • Tekan I( Shift+I ) untuk masuk ke mode insert.
  • Ketikkan beberapa spasi.
  • Tekan Esc. Semua garis akan bergeser.

Ini bukan uni-tasker. Berhasil:

  • Di tengah garis.
  • Untuk memasukkan string apa pun di semua baris.
  • Untuk mengubah kolom (gunakan cbukan I).
  • tarik, hapus, ganti, dll ...
sqqqrly
sumber
Ini rumit, tetapi merupakan cara yang harus dilakukan jika Anda memformat di luar core VIM (misalnya, menggunakan vim-prettieralih-alih mesin indentasi default). Dengan menggunakan cara >lain akan secara meremehkan pemformatan yang dilakukan oleh Prettier.
oligofren
Lucu, saya menemukan itu tidak rumit. Ini bukan uni-tasker! Mempelajari metode ini memiliki banyak kegunaan di luar indentasi.
sqqqrly
Saya merasa lebih baik daripada jawaban yang diterima, karena saya bisa melihat apa yang terjadi, garis yang saya pilih dan tindakan yang saya lakukan, dan bukan hanya mengetik semacam mantra vim.
user4052054
5
  • Untuk satu blok kode, {}: =+%

  • Untuk saluran yang dipilih: Shift+ vpilih menggunakan tombol panah atas / bawah, dan kemudian tekan =.

  • Untuk seluruh file: gg+ =+G

Catatan: 'gg' berarti pergi ke baris 1, '=' adalah perintah indent, dan 'G' memindahkan kursor ke akhir file .

Kulamani
sumber
4

Untuk membuat indentasi semua file dengan empat:

esc 4G=G
Michael
sumber
3
...apa? 'indentasi oleh 4 spasi'? Tidak, ini melompat ke baris 4 dan kemudian membuat indentasi semuanya dari sana hingga akhir file, menggunakan mode indentasi yang saat ini dipilih (jika ada).
underscore_d