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.