Pertanyaan Indentasi beberapa baris dengan cepat di vi


Seharusnya sepele, dan bahkan mungkin ada dalam bantuan, tetapi saya tidak tahu cara menavigasi. Bagaimana saya mengindentifikasikan beberapa baris dengan cepat di vi?


1968
2017-10-25 03:27


asal


Jawaban:


Menggunakan > perintah. Untuk mengindentifikasikan 5 baris, 5>>. Untuk menandai satu blok garis dan mengindentifikasikannya, Vjj> inden 3 baris (vim saja). Untuk indentasi blok kurung kurawal, letakkan kursor Anda di salah satu kurung kurawal dan gunakan >%.

Jika Anda menyalin blok teks di sekitar dan perlu menyelaraskan indentasi blok di lokasi barunya, gunakan ]p bukan hanya p. Ini meluruskan blok yang ditempel dengan teks sekitarnya.

Juga shiftwidth pengaturan memungkinkan Anda untuk mengontrol berapa banyak ruang untuk indentasi.


2321
2017-10-25 03:28



Jawaban ini merangkum jawaban dan komentar lain dari pertanyaan ini, dan menambahkan informasi tambahan berdasarkan pada Dokumentasi Vim dan Vim wiki. Untuk kepekatan, jawaban ini tidak membedakan antara perintah Vi dan Vim-specific.

Dalam perintah di bawah ini, "re-indent" berarti "garis indent sesuai dengan Anda pengaturan indentasi. " shiftwidth adalah 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, mis. =iB adalah perintah inden blok yang valid. Melihat "Indent a Code Block" untuk contoh yang bagus untuk mencoba perintah ini.

Juga, ingat itu

.    Repeat last command

, sehingga perintah indentasi dapat dengan mudah dan mudah diulang.

Re-indentasi file lengkap

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

gg=G  Re-indent entire buffer

Anda dapat memperluas ide ini ke beberapa 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 3 lines

Dalam mode insert

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

Ex perintah

Ini berguna ketika Anda ingin menentukan rentang garis tertentu, tanpa memindahkan Anda kursor.

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

Indentasi menggunakan penanda

Pendekatan lain adalah melalui spidol:

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

... pindahkan kursor ke lokasi akhir

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

Variabel yang mengatur indentasi

Anda dapat mengatur ini di Anda 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 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


886
2018-03-06 17:29



Pilihan besar akan menjadi

gg=G

itu benar-benar cepat, dan semuanya menjadi menjorok ;-)


116
2018-01-20 21:11



Coba juga ini untuk Indentasi-C indentasi, lakukan :help = untuk info lebih lanjut:

={

Itu akan mencekal otomatis blok kode saat ini Anda masuk

Atau hanya:

==

untuk secara otomatis memasukkan baris saat ini.


105
2017-10-25 04:21



Kunci-Tekan untuk lebih banyak orang visual:

  1. Masuk ke Mode Perintah:
    Melarikan diri 

  2. Bergerak ke awal area untuk mengindentifikasikan:
    hjkl 

  3. Mulai blok:
    v

  4. Bergerak ke ujung daerah untuk membuat indentasi:
    hjkl 

  5. (Opsional) Ketik jumlah tingkat indentasi yang Anda inginkan
    0..9

  6. Eksekusi indentasi di blok:
    >


73
2017-10-25 09:16



Selain jawaban yang sudah diberikan dan diterima, juga dimungkinkan untuk menempatkan penanda dan kemudian inden semuanya dari kursor saat ini ke penanda. Jadi, masukkan ma di mana Anda ingin bagian atas blok indentasi Anda, kursor ke bawah sejauh yang Anda butuhkan dan kemudian ketik >'a (perhatikan bahwa "a"dapat diganti untuk nama penanda yang valid. Ini kadang-kadang lebih mudah daripada 5>> atau vjjj>.


62
2017-10-25 04:00



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 dengan cepat di Vim atau gVim.

Untuk memasukkan baris saat ini
==

Untuk membuat indentasi semua garis di bawah garis saat ini

=G

Untuk inden n garis di bawah garis saat ini

n==

Misalnya, untuk mengindentifikasi 4 baris di bawah garis saat ini

4==

Untuk memasukkan blok kode, buka salah satu tanda kurung dan gunakan perintah

=%

Ini adalah perintah yang paling sederhana, namun kuat untuk mengindentifikasikan beberapa baris.


60
2018-04-18 18:41



Pergi ke awal teks

  • tekan v untuk mode visual.
  • menggunakan naik/turun panah untuk menyorot teks.
  • tekan = untuk memasukkan semua baris yang Anda sorot.

29
2017-11-04 22:57



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


27
2017-10-25 04:08



ketika Anda memilih blok dan menggunakan> untuk indent, indentasi kemudian kembali ke mode normal. Saya memiliki ini di .vimrc saya:

vnoremap < <gv

vnoremap > >gv

Ini memungkinkan Anda memasukkan pilihan Anda sebanyak yang Anda mau.


25
2018-02-15 05:42



Misalkan Anda menggunakan 2 spasi untuk memasukkan kode Anda. Mengetik:

:set shiftwidth=2
  • Mengetik v (untuk memasuki mode pengeditan blok visual)
  • Pindahkan kursor dengan tombol panah (atau dengan h/j/k/l) untuk menyorot garis yang ingin Anda indent atau unindent.

Kemudian:

  • Mengetik > indentasi sekali (2 spasi).
  • Mengetik 2> indentasi dua kali (4 spasi).
  • Mengetik 3> untuk indent tiga kali (6 spasi).
  • ...
  • Mengetik < ke unindent once (2 spaces).
  • Mengetik 2< ke unindent dua kali (4 spasi).
  • Mengetik 3< untuk tiga kali tidak memuaskan (6 spasi).
  • ...

Anda mendapatkan ide itu.

(Garis kosong tidak akan menjorok, yang menurut saya bagus.)


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

:help visual-block
/indent

Jika Anda ingin memberi hitungan pada perintah, lakukan ini sebelum mengetik   karakter operator: "v {move-around} 3>" (pindah baris 3 indentasi ke   hak).


20
2018-01-31 19:17