Soru Vi'de birden çok satırı hızlı bir şekilde gir


Önemsiz olmalı ve hatta yardımda olabilir, ancak nasıl gezineceğimi anlayamıyorum. Vi'de birden çok satırı hızlı bir şekilde nasıl girerim?


1969
2017-10-25 03:27


Menşei




Cevaplar:


Kullan > Komut. 5 satıra girmek için 5>>. Bir satır bloğunu işaretlemek ve girmek için Vjj> 3 satıra girme (sadece vim). Kıvrımlı ayraç bloğunu girmek için, imlecinizi küme parantezlerinden birine koyun ve >%.

Yakınındaki metin bloklarını kopyalarsanız ve bloğun girintisini yeni konumuna hizalamanız gerekiyorsa, ]p sadece yerine p. Bu yapıştırılan bloğu çevreleyen metinle hizalar.

Ayrıca shiftwidth ayar, girilecek boşluk sayısını kontrol etmenizi sağlar.


2324
2017-10-25 03:28



<shift> -v ayrıca Vim'de bir çizgi seçmek için çalışır. - akdom
> İ} kullanıyorum (girintili iç {} blok). Vim'de çalışır. VI'da çalıştığından emin değilim. - R. Martinho Fernandes
Benim problemim (gVim'de), komutun 2 boşluktan çok daha fazlasını girmesidir (sadece iki boşluk istiyorum ama> 5 boşluk gibi bir şey girintim) - Kamran Bigdely
@Kamran: Gör shiftwidth Bunu değiştirmenin yolu belirleniyor. - Greg Hewgill
@MattStevens: Bu fenomen hakkında genişletilmiş tartışmayı burada bulabilirsiniz: meta.stackexchange.com/questions/9731/... - Greg Hewgill


Bu cevap, bu sorunun diğer cevaplarını ve yorumlarını özetler ve Vim belgeleri ve Vim wiki. Dürüstlük için, bu cevap Vi ve Vim'e özgü komutları birbirinden ayırmaz.

Aşağıdaki komutlarda "yeniden girinti", " girinti ayarları." 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

Değiştirebilirsiniz { ile } veya B, Örneğin. =iB geçerli bir blok girinti komutudur. Şuna baksana "Kod Bloğu Girin" Bu komutları denemek için güzel bir örnek.

Ayrıca, bunu hatırla

.    Repeat last command

Bu nedenle girinti komutları kolayca ve uygun bir şekilde tekrar edilebilir.

Tam dosyaları yeniden girme

Diğer bir yaygın durum, bir kaynak dosya boyunca sabitlenmenin girilmesini gerektirir:

gg=G  Re-indent entire buffer

Bu fikri birden çok dosyaya genişletebilirsiniz:

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

Veya birden fazla arabellek:

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

Görsel Modda

Vjj> Visually mark and then indent 3 lines

Ekleme modunda

Bu komutlar şu anki hat için geçerlidir:

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, belirli bir satır aralığını girmek istediğinizde yararlıdır. imleç.

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

İşaretçileri kullanarak girinti

Başka bir yaklaşım belirteçler:

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

... imleci bitiş konumuna taşı

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

Girintiyi yöneten değişkenler

Bunları kendi .vimrc dosyası.

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 göre akıllı girintiye sahiptir. Bunu .vimrc’inize eklemeyi deneyin:

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

Referanslar


887
2018-03-06 17:29



Hem bu cevap hem de üstündekiler harikaydı. Ancak bunu + 1'ledim çünkü bana son komutu tekrarlayan 'nokta' operatörünü hatırlattı. Bu son derece Tüm bloğa basmaya ihtiyaç duyduğunda, birkaç vardiyada (veya girintide) basmaya gerek kalmadan >}. Teşekkürler uzun - Amit
5 >> Girinti 5 satır: Bu komut girintileri beşinci çizgi, 5 satır değil. Bu, VIM ayarlarından kaynaklanabilir mi, yoksa yanlış yazılmış mı? - Wipqozn
@Wipqozn - Bu garip. Vim 7.2.330 üzerinde test edilen, benim için önümüzdeki beş satırı kesinlikle girintili. - ire_and_curses
> 42gg ​​42 numaralı hatta girdiğiniz yer. - Steve
Büyük özet! Ayrıca, "bloğun içine girintinin" ve "tüm bloğun girintisinin" (<i {> a {vb.) De parantez ve parantezlerle çalıştığını unutmayın:> a (<i) vb. <> 'e ek olarak, ayrıca d, c, y vb. ile çalışırlar. - aqn


Büyük bir seçim olurdu

gg=G

Bu gerçekten hızlı ve her şey girintidir ;-)


116
2018-01-20 21:11



Bir XML dosyası oluşturdum ve sözdizimi vurgulamayı etkinleştirdim. Yazma gg=G sadece her satır 1'den başlayarak koyar. Tüm beyaz alanlar kaldırıldı. XML'e özgü başka bir şey var mı? - asgs
stackoverflow.com/questions/7600860/... - Johan
bence set cindent vimrc olmalı veya koşmalı :set cindent bu komutu çalıştırmadan önce - Amanuel Nega
Bence ilk önce cantent ayarlanmalı. ve @asgs bence bu sadece cstyle programlama dilleri için çalışıyor. - Amanuel Nega


Bunu da dene Cı-girintilenmiş girinti yapmak :help = daha fazla bilgi için:

={

Bu, bulunduğunuz mevcut kod bloğunu otomatik olarak girecek.

Ya da sadece:

==

mevcut satırı otomatik girintilemek için.


105
2017-10-25 04:21



Benim için çalışmıyor, sadece imlecimi 'geçerli kod bloğu'ndaki' açılış kilidinin üzerindeki çizgiye döküyorum. - underscore_d


Daha görsel insanlar için Anahtar-Presler:

  1. Komut Moduna Girin:
    Kaçış 

  2. Girintilemek için alanın başlangıcına doğru hareket edin:
    hjkl 

  3. Bir blok başlatın:
    v

  4. Girintilemek için alanın sonuna kadar hareket edin:
    hjkl 

  5. (İsteğe bağlı) İstediğiniz girinti seviyelerinin sayısını yazın
    0..9

  6. Blokta girinti yürütmek:
    >


73
2017-10-25 09:16



Bu harika, ama boşluk değil sekmeleri kullanıyor. Bunu düzeltmenin herhangi bir yolu var mı? - Shane Reustle
Sekmeler yerine onun boşlukları kullanıyorsa, o zaman muhtemelen büyük olasılıkla boşluk kullanmak için girinti var. =). - Kent Fredric
'Expandtab' seçeneği kapalı olduğunda (bu varsayılan değerdir) Vim, girintiyi yapmak için mümkün olduğunca fazla <Tab> kullanır. (: yardım:>) - Kent Fredric
Değiştirdiğim tek sekme / alanla ilgili vim ayarı: set tabstop = 3. Aslında her kullandığımda bunu ekliyorum >>: "<tab> <space> <space>". Bir blok girintisi ile aynı. Herhangi bir fikir? - Shane Reustle
"Boşluklara vs sekmelere" bakmak istediğiniz üç ayar 1'dir. Tabstop 2. shiftwidth 3. expandtab. Muhtemelen "shiftwidth = 5 noexpandtab" var, bu yüzden bir "sekme" 3 boşluk ve bir girinti seviyesi "5" boşluktur, bu yüzden 1 sekme ve 2 boşluk ile 5 oluşturur. - Kent Fredric


Zaten verilen ve kabul edilen cevaba ek olarak, bir işaretçi yerleştirmek ve daha sonra mevcut imleçten işaretçiye her şeyi girintilemek de mümkündür. Böylece girmek ma girintili bloğunuzun üstünü istediğiniz yerde, istediğiniz kadar imleç bırakın ve ardından yazın >'a (Bunu not et "a"geçerli herhangi bir işaretçi ismi ile ikame edilebilir). Bu bazen daha kolay 5>> veya vjjj>.


62
2017-10-25 04:00



Bu gerçekten yararlıdır. Bununla tüm bunların ne işe yaradığına bakmalıyım. Ben d'a ve y'a'yı biliyorum, başka ne var? - user606723
Bu, girintilemek istediğiniz satır sayısını sayma ihtiyacını ortadan kaldırdığı için çok kullanışlıdır. - ziggy


Tüm komutların ustası
gg=G

Bu dosyanın tamamını girer!

Ve aşağıda Vim veya gVim'de satırları hızlı bir şekilde yazmak için kullanılan basit ve zarif komutlardan bazılarıdır.

Mevcut çizgiyi girmek
==

Mevcut çizginin altındaki tüm satırları girmek

=G

Girinti yapmak n Mevcut çizginin altındaki çizgiler

n==

Örneğin, geçerli satırın 4 satırını girmek için

4==

Bir kod bloğunu girmek için, parantezlerden birine gidin ve komutu kullanın

=%

Bunlar, çoklu satırları girmenin en basit ve güçlü komutlarıdır.


60
2018-04-18 18:41



Bu sadece vim, değil vi. - rojomoke
@rojomoke: Hayır, vi'de çalışıyor - Sagar Jain
Solaris veya AIX kutularında değil. Eşit anahtar, her zaman standart ad hoc makro atamalarımdan biri olmuştur. Bakmadığına emin misin vim olarak ilişkilendirildi vi? - rojomoke
Evet, Linux'ta, vi neredeyse her zaman vim için bir bağlantıdır. İçinde şunu çalıştırmayı deneyin: vi. - rojomoke
Bu tür cevapları çok seviyorum: açık, kesin ve özlü. Debian Jessie'de benim için çalıştım. Teşekkürler, @SJain - datelligence


Metnin başına git

  • basın v görsel mod için.
  • kullanım yukarı/aşağı metni vurgulamak için oku.
  • basın = vurguladığınız tüm satırları girintilemek için.

29
2017-11-04 22:57





Sunulan çözümlerin yanı sıra, her zaman bir şeyleri paragraf yapmak isterim >}


27
2017-10-25 04:08



Evet, bu yüzden benim büyük uçurumlarımdan biri boş bir hatta beyaz boşluklar oluyor: vim'in bir "paragraf" nosyonunu karıştırıyorlar. - aqn


Bir blok seçtiğinizde ve girinti yapmak için> tuşunu kullandığınızda, girintiler normal moda geri döner. Bunu benim .vimrcimde var:

vnoremap < <gv

vnoremap > >gv

Seçiminizi istediğiniz kadar zaman girmenizi sağlar.


25
2018-02-15 05:42



Seçimi birçok kez girmek için, sadece tuşuna basabilirsiniz. önceki komutu tekrarlamak için - sundar
İle sorun. Bu durumda parmaklarınızı hareket ettirmeniz gerekiyor. @ Mike'nin çözümü ile (aynı kullandım), parmaklarınızı girintinin anahtarında zaten var ve sadece başka bir şey yapmaktan ziyade girintiliğe tutmak için onu tutmaya devam edebilirsiniz. Kullanım süresi daha uzun sürer çünkü ellerinizi hareket ettirmeniz gerekir ve daha fazla düşünce gerektirir çünkü bu, ikinci, farklı bir işlemdir. - masukomi


Kodunuzu girmeniz için 2 boşluk kullandığınızı varsayalım. Tür:

:set shiftwidth=2
  • tip v (görsel blok düzenleme moduna girmek için)
  • İmleci ok tuşlarıyla (veya h/j/k/l) girintilemek veya huzursuz etmek istediğiniz satırları vurgulamak için.

Sonra:

  • tip > bir kez girinti yapmak (2 boşluk).
  • tip 2> iki kez girinti yapmak (4 boşluk).
  • tip 3> üç kez girinti (6 boşluk).
  • ...
  • tip < bir kez (2 boşluk).
  • tip 2< iki kez (4 boşluk).
  • tip 3< üç kez (6 boşluk).
  • ...

Kaptın bu işi.

(Boş satırlar girintili olmayacak, sanırım güzel bir şey.)


Yanıtı, blokları girme (g) vim belgelerinde buldum:

:help visual-block
/indent

Komuta bir sayı vermek istiyorsanız, yazmadan hemen önce bunu yapın   operatör karakteri: "v {move-around} 3>" (satır 3 satır   doğru).


20
2018-01-31 19:17