Önemsiz olmalı ve hatta yardımda bile olabilir, ancak nasıl gezineceğinizi anlayamıyorum. Vi'de birden çok satırı nasıl çabucak girintileyebilirim?
Önemsiz olmalı ve hatta yardımda bile olabilir, ancak nasıl gezineceğinizi anlayamıyorum. Vi'de birden çok satırı nasıl çabucak girintileyebilirim?
Yanıtlar:
>Komutu kullanın . Beş satır girintilemek için 5>>. Bir satır bloğunu işaretlemek ve girintilemek, Vjj>üç satırı girintilemek için (yalnızca Vim). Kıvırcık parantez bloğuna girinti eklemek için, imlecinizi kıvırcık parantezlerden birinin üzerine getirin ve >%blok kullanımının herhangi bir yerinden veya>iB .
Etrafında metin blokları kopyalıyorsanız ve bir bloğun girintisini yeni konumuna hizalamanız gerekiyorsa ]p, sadece yerine kullanın p. Bu, yapıştırılan bloğu çevresindeki metinle hizalar.
Ayrıca, shiftwidth
ayar, girintiye girecek boşluk sayısını kontrol etmenizi sağlar.
shiftwidth
Bunu değiştirmenin yolu için ayara bakın .
Bu cevap, bu sorunun diğer cevaplarını ve yorumlarını özetler ve Vim belgelerine ve Vim wiki'ye dayalı ek bilgiler ekler. . Kısaca, bu cevap Vi ve Vim'e özgü komutları ayırt etmez.
Aşağıdaki komutlarda "yeniden girinti", " girinti ayarlarınıza göre satırları girinti" anlamına gelir . shiftwidth
girintiyi kontrol eden birincil değişkendir.
Genel Komutlar
>> 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
Sen yerini alabilir {
ile }
veya B
örneğin =iB
geçerli bir blok girinti komuttur. Bir göz atın "Girinti Kod Bloğu" bu komutları denemek için güzel bir örnek.
Ayrıca, unutmayın
. Repeat last command
, girinti komutları kolayca ve rahatlıkla tekrarlanabilir.
Tam dosyaları yeniden girintileme
Başka bir yaygın durum, girintinin bir kaynak dosya boyunca düzeltilmesini gerektirir:
gg=G Re-indent entire buffer
Bu fikri birden fazla dosyaya genişletebilirsiniz:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Veya birden çok arabellek:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
Görsel Modda
Vjj> Visually mark and then indent three lines
Ekleme modunda
Bu komutlar geçerli satıra uygulanır:
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 komutları
Bunlar, imlecinizi hareket ettirmeden belirli bir satır aralığını girinti yapmak istediğinizde yararlıdır.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
İşaretçileri kullanarak girintileme
Başka bir yaklaşım belirteçlerle :
ma Mark top of block to indent as marker 'a'
... imleci son konuma taşı
>'a Indent from marker 'a' to current location
Girintiyi yöneten değişkenler
Bunları .vimrc dosyanızda ayarlayabilirsiniz .
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 dosya türüne dayalı akıllı girintiye sahiptir. Bunu .vimrc'nize eklemeyi deneyin:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Referanslar
>}
. Teşekkürler uzun
Büyük bir seçim:
gg=G
Gerçekten hızlı ve her şey girintili ;-)
gg=G
, her satırı 1 konumundan başlayarak koyar. Tüm beyaz boşluklar kaldırılmıştır. XML'e özgü başka bir şey var mı?
set cindent
vimrc olmalı ya çalışmalıdır :set cindent
bu komutu çalıştırmadan önce
C girintili girinti için de bunu deneyin . Daha :help =
fazla bilgi için yapın:
={
Bu, içinde bulunduğunuz kod bloğunu otomatik olarak girintili hale getirir.
Ya da sadece:
==
geçerli satırı otomatik olarak girintilemek için.
Daha görsel insanlar için tuşa basma:
Komut Moduna Gir:
Escape
Girinti yapmak için alanın başına gidin:
hjkl↑↓←→
Bir blok başlatın:
v
Girinti yapmak için alanın sonuna gidin:
hjkl↑↓←→
(İsteğe bağlı) İstediğiniz girinti düzeyi sayısını yazın
0..9
Bloktaki girintiyi yürütün:
>
Tüm komutların efendisi
gg=G
Bu dosyanın tamamını girintili hale getirir!
Ve aşağıda Vim veya gVim'de satırları hızla girintilemek için kullanılan basit ve zarif komutlardan bazıları.
Geçerli satırı girintilemek için
==
Geçerli satırın altındaki tüm satırları girintilemek için
=G
n
Geçerli satırın altındaki satırlara girinti eklemek için
n==
Örneğin, geçerli satırın 4 satırının altına girinti eklemek için
4==
Bir kod bloğunu girintilemek için kaşlı ayraçlardan birine gidin ve komutunu kullanın
=%
Bunlar, birden çok satırı girintilemek için en basit ancak güçlü komutlardır.
vim
, değil vi
.
vim
bağlantılı bir şeye bakmadığınızdan emin misiniz vi
?
Halihazırda verilen ve kabul edilen cevaba ek olarak , bir imleç yerleştirmek ve ardından mevcut imleçten imlece kadar her şeyi girinti yapmak da mümkündür.
Bu nedenle, ma
girintili bloğunuzun üst kısmını istediğiniz yere girin , imleci istediğiniz kadar aşağıya yazın ve sonra yazın >'a
(" a
" herhangi bir geçerli işaretçi adı ile değiştirilebileceğini unutmayın ). Bu bazen 5>>
veya ' den daha kolaydır vjjj>
.
Metnin başına git
Sunulan çözümlerin yanı sıra, her seferinde bir paragraf yapmak istiyorum >}
Bir blok seçip >girintilemek için kullandığınızda , girintiler daha sonra normal moda geri döner. Bu benim .vimrc dosyamda var:
vnoremap < <gv
vnoremap > >gv
Seçiminizi istediğiniz kadar girintilemenizi sağlar.
Kodunuzu girintilemek için 2 boşluk kullandığınızı varsayalım. Tür:
:set shiftwidth=2
Sonra:
Kaptın bu işi.
( Boş satırlar girintili olmayacak, bence hoş bir şey. )
Girintili bloklar için (g) vim belgelerinde cevabı buldum:
:help visual-block
/indent
Komuta bir sayım vermek istiyorsanız, operatör karakterini yazmadan hemen önce bunu yapın: "v {move-around} 3>" (satır 3 girintilerini sağa taşı).
Vim kullanıcı arayüzünün güzelliği tutarlılığıdır. Düzenleme komutları, komuttan ve imleç hareketinden oluşur. İmleç hareketleri her zaman aynıdır:
'
.Bu nedenle, vim kullanmak için imleci hareket ettirmeyi ve örneğin >girintileme (ve <"çıkıntı") gibi komutların bir repertuarını hatırlamayı öğrenmelisiniz .
Böylece, yapmanız ekranın üst imleç pozisyonundan hatları girinti için >H, >Gdosyanın en altına uygulanacak girinti.
Yazmak yerine >H, yazarsanız dH, aynı satır bloğunu, cHdeğiştirmek için vb. Silmiş olursunuz .
Bazı imleç hareketleri belirli komutlarla daha iyi uyum sağlar. Özellikle, %komut bir HTML veya XML bloğunun tamamını girintilemek için kullanışlıdır. Dosya sözdizimi vurgulanmışsa ( :syn on
), imleci bir etiket metninde (<div> "i" harfinde ayarlamak ve girmek >%</div> etiketine kadar girintili olacaktır.
Vim şu şekilde çalışır: kişi sadece imleç hareketlerini ve komutları ve bunların nasıl karıştırılacağını hatırlamak zorundadır. Bu soruya cevabım olurdu Yani "sen girinti istediğiniz çizgilerin bloğun bir ucuna gidin ve sonra yazın >komuta ve bloğun diğer ucuna bir hareket" eğer girinti , çizgiler kayması olarak yorumlanır =eğer girinti güzel baskıdaki gibi yorumlanır.
Bunu yap:
$vi .vimrc
Ve bu satırı ekleyin:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Bu sadece bir cpp dosyası içindir. Bunu sadece dosya türünü değiştirerek başka bir dosya türü için de yapabilirsiniz ...
norm i
Satırı başına verilen metni eklemek için komutu kullanabilirsiniz . 2-10. Satırların önüne 10 boşluk eklemek için:
:2,10norm 10i
Komutun sonunda bir boşluk karakteri olması gerektiğini unutmayın - bu eklemek istediğimiz karakter olacaktır. Ayrıca, herhangi bir metni içeren bir satırı girintileyebiliriz, örneğin bir dosyadaki her satırı beş alt çizgi karakteriyle girintili yapmak için:
:%norm 5i_
Ya da daha süslü bir şey:
:%norm 2i[ ]
Daha pratik bir örnek, Bash / Python / etc kodunu # karakteriyle yorumlamaktır:
:1,20norm i#
Girintiyi yeniden kullanmak xyerine i. Örneğin, her satırdan ilk 5 karakteri kaldırmak için:
:%norm 5x
Bunu kullanarak bunu yapmanın hızlı bir yolu, VISUAL MODE
bir kod bloğuna yorum yapmakla aynı işlemi kullanır.
Bu, direktifinizi değiştirmemeyi shiftwidth
veya herhangi bir set
direktif kullanmamayı tercih ediyorsanız ve SEKMELER veya MEKANLAR veya başka herhangi bir karakterle çalışacak kadar esnekse kullanışlıdır .
-- VISUAL MODE --
:
istemine geçmek için yazın3 önde gelen boşlukla değiştirme:
:'<,'>s/^/ /g
Veya önde gelen sekmelerle değiştirme:
:'<,'>s/^/\t/g
Kısa açıklama:
'<,'>
- Görsel Olarak Seçilen Aralıkta
s/^/ /g
- Tüm aralıktaki her satırın başına 3 boşluk ekleyin
(veya)
s/^/\t/g
- Tab
Tüm aralıktaki her satırın başına ekleyin
Girinti için metni işaretlemeyi seviyorum:
Not: :'a,'ztekniği, satır, sayı veya kullanabileceğiniz herhangi bir işlem (d, y, s ///, vb.) İçin bir aralığı işaretlemek için kullanabilirsiniz %.
:help left
İçinde veya belirtilen çizgileri belirli bir miktarda hizalamak için ex mode
kullanabilirsiniz . Spesifik olarak, will [aralığında] Sol hizalama hatları. Satırlardaki girintiyi [girinti] olarak ayarlar (varsayılan 0).:left
:le
:left
:%le3
veya veya :%le 3
veya :%left3
veya :%left 3
üç boşlukla dolgu yaparak tüm dosyayı hizalar.
:5,7 le 3
5 ile 7 arasındaki satırları üç boşlukla dolduracak şekilde hizalar.
:le
Herhangi bir değer olmadan veya :le 0
0 dolgu ile sola yaslanır.
Bu Vim ve gVim'de çalışır.
:'<,'>le4
boşluk eklemek için. Teşekkürler!
Benim için, MacVim (Visual) çözümü, fare ile seçin ve ">" tuşuna basın, ancak sekmeler yerine boşlukları sevdiğim için aşağıdaki satırları "~ / .vimrc" içine yerleştirdikten sonra:
set expandtab
set tabstop=2
set shiftwidth=2
Ayrıca MacVim'i komut satırından (Terminal.app) çağırabilmenizde fayda var, bu yüzden "macvim" adlı bir komut dosyası yerleştirdiğim aşağıdaki yardımcı dizin "~ / bin" olduğu için:
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
Ve tabii ki "~ / .bashrc" de:
export PATH=$PATH:$HOME/bin
MacPorts "~ / .profile" ile çok uğraştığından PATH ortam değişkeni oldukça uzayabilir.
5==
geçerli imleç konumundan beş satıra girintili olur.
Böylece daha önce herhangi bir sayı yazabilirsiniz ==
. Satır sayısını girintilendirecektir. Bu komut modunda.
gg=G
tüm dosyayı yukarıdan aşağı doğru girintili hale getirir.
Yorumlarda kullandığım bir yöntem bulamadım, bu yüzden paylaşacağım (sanırım sadece Vim):
Bu, içindeki girinti / sekme ayarlarını değiştirmek istemiyorsanız vimrc
veya düzenleme sırasında değiştirmeyi hatırlamak istemediğinizde kullanışlıdır .
Girintisizleştirmek için boşlukları seçmek ve silmek için aynı Ctrl+ Vblok seçimini kullanıyorum D.
Bunun gibi basit bir cevap bulmanın neden bu kadar zor olduğunu bilmiyorum ...
Bunu bilmek için kendim çok uğraşmak zorunda kaldım. Çok basit:
.vimrc
dizini altındaki dosyanızı düzenleyin.Bu satırı ekle
set cindent
dosyasında düzgün bir şekilde girinti eklemek istediğiniz
Normal / komut kipinde
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>
Örneğin,
14,21> shifts line number 14 to 21 to one tab
Daha fazla sekme için '>' sembolünü artırın.
Örneğin,
14,21>>> for three tabs
:set number
(bunlar geçiş hattı numaralarına kapalı varsayılan olarak) veya koymak set number
da vimrc içinde.
Python'u çok kullanarak, kendimi sık sık blokları birden fazla girintiye kaydırmaya ihtiyaç duyduğumu görüyorum. Bunu, blok seçim yöntemlerinden herhangi birini kullanarak yapabilir ve ardından atlamak istediğiniz girintilerin sayısını>
Örneğin, V5j3>
beş satırı üç kez girintilendirir - girintiler için dört boşluk kullanırsanız 12 boşluk olur.
Seçenek 1: Visual Block moduyla vi'daki bir blok bloğunu üç boşluğa girin:
Girintilemek istediğiniz kod bloğunu seçin. Bunu Ctrl+Vnormal modda kullanarak ve metni seçmek için aşağı ok yaparak yapın. Seçili :
durumdayken, seçilen metnin bloğuna komut vermek için Enter tuşuna basın.
Komut satırında aşağıdakiler görünecektir: :'<,'>
Girintiyi üç boşluğa ayarlamak için, yazın le 3
ve enter tuşuna basın. Görünen budur::'<,'>le 3
Seçilen metin hemen üç boşluğa girintilidir.
Seçenek 2: Visual Line moduyla vi'daki bir blok bloğunu üç boşluğa girin:
Normal modda olun ve aşağıdaki tuşlara basın:
Vjjjj:le 3
Yaptıklarınızın yorumlanması:
V
metin seçmeye başlamak anlamına gelir.
jjjj
dört satır vurgulayarak dört ok aşağı.
:
vi'ye vurgulanan metin için bir talimat gireceğinizi bildirir.
le 3
vurgulanan metni üç satır girintilemek anlamına gelir.
Seçilen kod hemen üç boşluk girintisine arttırılır veya azaltılır.
Seçenek 3: Girintiyi artırmak için Görsel Blok modunu ve özel ekleme modunu kullanın:
Normal modda olun aşağıdaki tuşlara basın:
Ctrl+V
jjjj
(boşluk çubuğuna beş kez basın)
Esc Shift+i
Vurgulanan tüm metinde beş boşluk daha girintilidir.
Blok kipinde görsel seçim kullanıyorum:
I
( Shift+ I) tuşuna basın .Bu bir tek görevli değil. İşe yarıyor:
c
yerine kullanın I
).vim-prettier
varsayılan girinti motoru yerine) biçimlendirmenin yolu budur . >
Aksi takdirde, kullanmak Prettier tarafından yapılan biçimlendirmeyi kraliyetle bükecektir.
Tüm dosyayı dört girintili yapmak için:
esc 4G=G
Kaynak: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html