Vi / Vim'de çok satırlı bir seçimin başına metin ekleme


423

In Vim , nasıl bir seçimdeki her satırın başında karakterler ekleme yapmak?

Örneğin, dilimin //yorum sisteminin blok yorumlamaya izin vermediğini varsayarak, her satırın başında başlayarak bir kod bloğuna yorum yapmak istiyorum /* */. Bunu nasıl yaparım?

Yanıtlar:


748
  • Basın Esc'Komut moduna' girmek için
  • Görsel blok moduna girmek için Ctrl+ tuşlarını kullanınV
  • Yorum yapmak istediğiniz satırlardaki metin sütunlarını seçmek için Up/ Downdüğmesini taşıyın .
  • Ardından Shift+ idüğmesine basın ve eklemek istediğiniz metni yazın.
  • Ardından Esc, 1 saniye bekleyin, eklenen metin her satırda görünecektir.

Daha fazla bilgi ve okuma için Vim İpuçları Wiki'sindeki " Birden çok satıra metin ekleme " konusuna bakın.


6
Bununla ilgili tek serseri, Ctrl + V'nin GVIM'de geçersiz kılınmış gibi görünmesidir.
Jordan Parmer

14
Benim için değil (linux üzerinde) değil
pixelbeat

23
Ctrl-Q'yu gVim'de bir yedek olarak kullanabilirsiniz (as: help Ctrl-V açıklar) ancak ok tuşlarından ziyade bu modda gezinmek için hjkl kullanmanız gerekir
Gareth

9
Ctrl-v'niz windows gvim'de geçersiz kılınmışsa, mswin.vim dahil olmak üzere durdurmak için global vimrc'yi düzenlemeniz gerekir.
graywh

18
Esc'i ittikten sonra bunun neden hiçbir şey yapmayacağını bilmiyor musunuz? Ben az yüz daha hatlarda ne bir şey 10 saniye gibi bekledi - Aldırma, ben itiyordu Shift + vdeğil CTRL + v. @ vkaul11 Muhtemelen aynı şey lol yaptık
Tek

186

Bu, her satırın başlangıcını "//" ile değiştirir:

:%s!^!//!

Bu, seçilen her satırın başlangıcını ( seçmek için görsel modu kullanın) "//" ile değiştirir:

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

Not olduğunu gv(normal modda) son görsel seçimi geri yükler, bu zaman zaman kullanışlı oluyor.


3
Teşekkürler! Tamamen mantıklı. Ve metni kaldırmak şu şekildedir: '<,'> s! ^ // !!
Jordan Parmer

4
Yukarıdaki cevaptaki ünlem işaretlerinin anlamı nedir? (:% s! ^! //!)
Henrik K

19
@ HKK, normalde bir arama / değiştirme komutu için eğik çizgi karakterini / bir sınırlayıcı olarak kullanır. Bu durumda, aramanın ve değiştirmenin bir parçası olarak eğik çizgi ekliyoruz, bu yüzden alternatif bir sınırlayıcı, ünlem işareti kullanıyoruz!
cyber-monk

+1 Bu, (Ctrl + V) (Shiift + I) Esc'nin çalışmadığı VsVim'de çalışır.
Seth Reno

4
1, (benim kullandığım burada düzenli ifade ayırıcı olarak başka bir şey kullanmak edebildiğini bilmiyordum /ve kaçmaya zorunda //içinde :s/^/\/\/yerine yazma :s!^!//)
Hashbrown

83

Arama ve değiştirme için genel model:

:s/search/replace/

'Arama'nın ilk tekrarını geçerli satır için' yerine koy 'ile değiştirir

:s/search/replace/g

'Arama'nın tüm tekrarlarını geçerli satırın yerine' değiştir 'ile değiştirir,' g '' global 'kısaltmasıdır

Bu komut her 'arama' örneğini yalnızca geçerli satır için 'replace' ile değiştirecektir. %, Tüm dosyayı aramak için kullanılır. Her değiştirme işlemini etkileşimli olarak onaylamak için onaylamak için bir 'c' ekleyin:

:%s/search/replace/c

Etkileşimli onaylama, 'arama' ile tüm dosya için 'değiştir'

% Karakteri yerine bir satır numarası aralığı kullanabilirsiniz ('^' karakterinin satırın başlangıcı için özel bir arama karakteri olduğuna dikkat edin) :

:14,20s/^/#/

14-20 satırlarının başına '#' karakteri ekler

Başka bir yorum karakteri (// gibi) kullanmak istiyorsanız, komut sınırlayıcınızı değiştirin:

:14,20s!^!//!

14-20 satırlarının başına '//' karakter dizisi ekler

Veya her zaman // karakterlerinden kaçabilirsiniz:

:14,20s/^/\/\//

14-20 satırlarının başına '//' karakter dizisi ekler

Editörünüzde satır numaraları görmüyorsanız, aşağıdakileri yazmanız yeterlidir

:set nu

# başlangıcını kaldırmak için: 14,20s / # / ^ / yerine şunu kullanmalısınız: 14,20s / # //
cn1h 16:12

1
@ cn1h Bence bu da diğerlerinin yerini alacak #. Bunun ^#yerine kullanmalısınız .
ankush981

Temel bilgileri açıkladığınız için teşekkürler. Bir şeyin neden olduğunu bilmek güzel.
didierCH

38

Yeni gelenler için daha kolay olabilecek başka bir yol:

 some█
 code
 here

İmleci ilk satıra getirin, örn.

gg

ekleme moduna geçmek ve metninizi eklemek için aşağıdakileri yazın:

I / / Space

 // █some
 code
 here

Basın Esckomut moduna geri almak ve digraph kullanmak:

j . j .

 // some
 // code
 //█here

jbir satır aşağı gitmek için yaptığınız bir hareket komutudur ve .yaptığınız son düzenleme komutunu tekrarlar.


3
Bu gerçekten basit :). Eğer sorun yaşıyorsanız, büyük harf yerine bir çubuk (\ ile diğer sembolü) |yazıyor olabilirsiniz I. Ben |ilk başta olduğunu düşündüm .
cokedude

1
"5." yaparsam aynı satırdan 5 karakter siler. Her satırdan aynı anda 5 karakteri silmesini nasıl sağlarım?
Rahul Prasad

1
@RahulPrasad Diyelim ki 25 satırınız var, sonra ilk satırın önünden başlayarak 5xj'yi bir kayıt defterine kaydedin ve 24 kez kayıt yapın, örneğin: qa5xjq25 @ a Ama bunu gerçek bir soru olarak gönderirseniz daha iyi olur zaten yoksa ...
ninegrid

26

Ve yine başka bir yol:

  • Satırın başına git
  • Görsel Blok moduna gir ( CTRL-v )
  • İstediğiniz çizgileri seçmek (aşağı / yukarı hareket j/ k[hat] olan bir hatta veya atlamaG )
  • basın I (başkent i)
  • yorum karakterlerini yazın
  • basın ESC

20

Bu #, her satırın başına ekler :

:%s/^/#/

Ve insanlar senaryoları düzgün yorumlamadığınız için şikayet etmeyi bırakacaklar.


2
Yalnızca seçili (veya birkaç) satıra # eklemek isterseniz
Rahul Prasad

15

Bu konuda süper süslü olmak istiyorsanız, bunu .vimrc'nize koyun:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

Ardından, görsel modda, sen vurabilir zaman \ciçin c blok omment ve \uhiç u bunu ncomment. Tabii ki, bu kısayol tuş vuruşlarını herhangi bir şekilde değiştirebilirsiniz.


Yeni bir şey tanıttığı için oylandı - vmap!
ankush981

11

Yine başka bir yol:

:'<,'>g/^/norm I//

/^/her satıra uyması için sadece kukla bir modeldir. normaşağıdaki normal mod komutlarını çalıştırmanızı sağlar. I//imleci satırın başına atlarken ekleme moduna girme, ardından aşağıdaki metni ekleme (iki eğik çizgi).

:g birden fazla modda atlamak, satırları silmek veya eklemek, imleci hareket ettirmek, bir grup makro çalıştırmak vb. gibi birçok satırda karmaşık bir şey yapmak için genellikle kullanışlıdır. bir kalıpla eşleşir.


1
aslında: g komutu gerekli değildir. Bu yapacağız: '<'> norm I //
Siber Oliveira

1
Ve: s bu durumda da kullanmak daha iyidir.
graywh

Bu en faydalı cevaptır.
Barışçıl

3

Kod bloklarını yorumlamak için NERD Commenter eklentisini seviyorum .

Biraz metin seçin:

Shift-V
...select the lines of text you want to comment....

Yorum Yap:

,cc

uncomment:

,cu

Veya bir satırın veya bloğun yorum durumunu değiştirin:

,c<space>

2

Ben tavsiye edebilir EnhCommentify eklentisi.

Örneğin. bunu vimrc'nize koyun:

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

daha sonra (seçilen) satırları ', c'



1

Yorum yapılacak alanı görsel bir blok olarak işaretleyin ( <C-V)

ve yap c#<ESC>p

  1. conu "#" olarak değiştir
  2. geri koy

Sık sık yaparsanız \q, .vimrc dosyanızda bir kısayol (örnek ) tanımlayın

:vmap \q c#<ESC>p

1

Birinin çok satırlı seçiminin aslında bir paragraf olması durumunda, satırları manuel olarak seçmeye gerek yoktur. vim bunu sizin için yapabilir:

  1. vip: paragrafın tamamını seçme ve işaretleme
  2. shift-i: satır başına metin ekle
  3. escape: ekleme modundan çık / normal moda gir [satır başlangıçları hala seçili]
  4. escape: satır başlangıçlarının seçimini kaldır

0

Her satırın başına "ABC" eklemek için:

1) Komut moduna gidin

2):% norm I ABC


Bu, metni satırdaki ilk boşluk olmayan karakterin soluna ekler.
Kingsley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.