Vim - Bir yeni satırın yerini \ n iki \ n


34

Vim editöründe, vim komut modunu kullanarak yeni satır karakterini (\ n) iki yeni satır karakteriyle (\ n \ n) değiştirmek istiyorum.

Giriş dosyası içeriği:

This is my first line.
This is second line.

Çalıştığım Komut:

:%s/\n/\n\n/g

dizeyi istenmeyen karakterlerle değiştirir.

This is my first line.^@^@This is second line.^@^@

Sonra aşağıdaki komutu denedim

:%s/\n/\r\r/g

Düzgün çalışıyor. İkinci komutla neden iyi çalıştığını açıklayabilir misiniz?



2
Bilginize: Ayrıca bir Vi ve Vim (beta) SE vardır .
Dubu

2
Yan not, /ayırıcı olarak kullanmak zorunda değilsiniz . Bu daha okunur::%s;\n;\n\n;g
DJMcMayhem

1
Ara \nile değiştirin, \r\r, :% s/\n/\r\r/g: stackoverflow.com/a/71334/911945
Anton Tarasenko

Yanıtlar:


47

İşin garibi, \nvim in değiştirme için yeni satır anlamına gelmez, ama boş. ASCII nul ^@( control@) 'dir.

Tarihsel olarak vi, ^M( controlM) yerine yeni satır olan satır sonunu koyar . vim \r, aynısını ifade etmek için bir uzantı (C dili gibi) ekledi ^M, ancak geliştiriciler metni değiştirirken\n boş bırakmayı seçti . Bu, yeni bir satır bulan aramalardaki kullanımıyla tutarsız .

Daha fazla okuma:


7

Bu deneyin: %s/$/^V^M/(burada ^Volduğu Ctrl-Vve ^Mbir Ctrl-M- yazarken ^Vbir yazdırılır ^yazarken sonra üzerine geri silme sonra kömürü ve ^Mgibi görünecektir ^MCtrl-V standart tty olduğunu ... literal sonraki komutu çalıştırmak - karakteri stty -aiçin tty'nizin özel karakterlerini gösterin).


Aslında, çok deneyimli, bunu bırakmak ve dos2unix veya benzeri kullanmak için bir alternatif olarak CRLF'den istenen dönüşüm için bunu bilecektir. Ctrl-V kullanımı 1 günlük bir derstir.
mckenzm

5

vimbellekteki \nboş bir karakteri temsil etmek için kullanın \0, nasıl vimişlenecek dosyanın boş karakter içerdiğini (ancak yapamazken vi).

Kullanımı \ntamponu içinde hattın tek eşleşme sonunda, dizge olmayan satır ifade kullanıldığında.

Bakınız : h NL-kullanılmış-Null için ve : h CR-kullanılmış-NL- için daha fazla ayrıntı için.


1

Neovim ( nvim) ve Vimsürümleri ile test edilmiştir

NVIM v0.3.0
VIM - Vi IMproved 8.1

Yeni bir satırı kaldır:

cell
allele
rs2981578
fgfr2

Burada, \nyeni satırlarla eşleşir ( ancak yeni satır eklemek için şunu kullanın \r):

:'<,'>s/\n/|/g

cell|allele|rs2981578|fgfr2

Yeni satır ekle:

Hayır:

cell|allele|rs2981578|fgfr2

:'<,'>s/\n/|/g

cell^@allele^@rs2981578^@fgfr2

^@LF için diakritik bir işarettir (satır besleme; bkz. http://vimhelp.appspot.com/digraph.txt.html#digraphs-default )

Evet:

cell|allele|rs2981578|fgfr2

:'<,'>s/|/\r/g

cell
allele
rs2981578
fgfr2

OP’nin sorusunu ele almak ( \nikisiyle nasıl değiştirilir \n\n), bir tane daha ekleyin \r:

cell
allele
rs2981578
fgfr2

:'<,'>s/\n/\r\r/g

cell

allele

rs2981578

fgfr2

... yani orijinal newline ( \n) ile eşleşin ve iki newline / satır başı ( \r\r) ile değiştirin.

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.