Itu seharusnya sepele, dan bahkan mungkin bisa membantu, tapi saya tidak tahu bagaimana menavigasi itu. Bagaimana cara indentasi beberapa baris dengan cepat di vi?
Itu seharusnya sepele, dan bahkan mungkin bisa membantu, tapi saya tidak tahu bagaimana menavigasi itu. Bagaimana cara indentasi beberapa baris dengan cepat di vi?
Jawaban:
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, shiftwidth
pengaturan ini memungkinkan Anda untuk mengontrol berapa banyak ruang untuk inden.
shiftwidth
pengaturan cara untuk mengubahnya.
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 ." 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
, misalnya =iB
perintah 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
>}
. Terima kasih banyak
Pilihan besar adalah:
gg=G
Ini sangat cepat, dan semuanya mendapat indentasi ;-)
gg=G
hanya menempatkan setiap baris mulai dari posisi 1. Semua spasi putih telah dihapus. Apakah ada hal lain yang spesifik untuk XML?
set cindent
harus di vimrc atau harus dijalankan :set cindent
sebelum menjalankan perintah itu
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.
Penekanan kunci untuk lebih banyak orang visual:
Masuk ke Mode Perintah:
Escape
Bergerak ke awal area untuk indentasi:
hjkl↑↓←→
Mulai blok:
v
Bergeraklah ke ujung area untuk indentasi:
hjkl↑↓←→
(Opsional) Ketikkan jumlah level indentasi yang Anda inginkan
0..9
Jalankan indentasi pada blok:
>
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 n
garis 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.
vim
, bukan vi
.
vim
yang ditautkan vi
?
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 ma
mana 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>
.
Pergi ke awal teks
Serta solusi yang ditawarkan, saya suka melakukan hal-hal paragraf sekaligus >}
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.
Misalkan Anda menggunakan 2 spasi untuk membuat indentasi kode Anda. Tipe:
:set shiftwidth=2
Kemudian:
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).
Keindahan UI Vim adalah konsistensinya. Perintah pengeditan terdiri dari perintah dan gerakan kursor. Gerakan kursor selalu sama:
'
.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.
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 ...
Anda dapat menggunakan norm i
perintah 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
Cara cepat untuk melakukan ini menggunakan VISUAL MODE
proses yang sama dengan mengomentari blok kode.
Ini berguna jika Anda memilih untuk tidak mengubah shiftwidth
atau menggunakan set
arahan apa pun dan cukup fleksibel untuk bekerja dengan TABS atau SPACES atau karakter lainnya.
-- VISUAL MODE --
:
untuk beralih ke promptMengganti dengan 3 spasi utama:
:'<,'>s/^/ /g
Atau ganti dengan tab terkemuka:
:'<,'>s/^/\t/g
Penjelasan singkat:
'<,'>
- Dalam Rentang Terpilih Secara Visual
s/^/ /g
- Masukkan 3 spasi di awal setiap baris dalam seluruh rentang
(atau)
s/^/\t/g
- Masukkan Tab
di awal setiap baris dalam seluruh rentang
Saya suka menandai teks untuk indentasi:
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 %.
:help left
Di ex mode
Anda dapat menggunakan :left
atau :le
untuk menyelaraskan garis jumlah yang ditentukan. Secara khusus, Kiri:left
akan menyelaraskan garis dalam [kisaran]. Ini mengatur indent pada baris ke [indent] (default 0).
:%le3
atau :%le 3
atau :%left3
atau :%left 3
akan 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.
:'<,'>le4
untuk memasukkan spasi. Terima kasih!
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.
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.
Saya tidak menemukan metode yang saya gunakan di komentar, jadi saya akan membagikannya (saya pikir hanya Vim):
Ini berguna ketika Anda tidak ingin mengubah pengaturan lekukan / tab vimrc
atau mengingatnya untuk mengubahnya saat mengedit.
Untuk melepas saya menggunakan Ctrl+ Vblok yang sama pilih untuk memilih spasi dan menghapusnya dengan D.
Saya tidak tahu mengapa sangat sulit untuk menemukan jawaban sederhana seperti ini ...
Saya sendiri harus banyak berjuang untuk mengetahui hal ini. Ini sangat sederhana:
.vimrc
file 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)
: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
:set number
untuk mengganti nomor baris (mereka dinonaktifkan secara default), atau memasukkan set number
vimrc Anda.
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.
Opsi 1: Indentasi blok kode di vi ke tiga spasi dengan mode Visual Block:
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.
Berikut ini akan muncul di baris perintah: :'<,'>
Untuk mengatur indent ke tiga spasi, ketik le 3
dan tekan enter. Inilah yang muncul::'<,'>le 3
Teks yang dipilih segera dimasukkan ke dalam tiga spasi.
Opsi 2: Indentasi blok kode di vi ke tiga spasi dengan mode Visual Line:
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:
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.
Saya menggunakan pemilihan visual mode blok:
I
( Shift+I ) untuk masuk ke mode insert.Ini bukan uni-tasker. Berhasil:
c
bukan I
).vim-prettier
alih-alih mesin indentasi default). Dengan menggunakan cara >
lain akan secara meremehkan pemformatan yang dilakukan oleh Prettier.
Untuk membuat indentasi semua file dengan empat:
esc 4G=G
Sumber: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html