Vim'deki yeni satırı sil


271

Bir sonraki satırın geçerli satıra eklenmesini sağlamak için Vim'deki bir satırın sonundaki yeni satırı silmenin bir yolu var mı?

Örneğin:

Evaluator<T>():
    _bestPos(){
}

Bunları satırları kopyalayıp bir öncekine yapıştırmadan tek bir satıra koymak istiyorum. İmlecimi her satırın sonuna getirebilmem, bir tuşa basabilmem ve bir sonraki satırın imlecin üzerinde olduğu yere atlayabilmesi gibi görünüyor.

Sonuç:

Evaluator<T>(): _bestPos(){ }

Bu Vim'de mümkün mü?


Vim'in ekleme modunda satırın sonunda Del benim için çalışırdı. Yine de her terminalde değil.
Victor Sergienko

Yanıtlar:


584

İlk satırdaysanız, (büyük harf) tuşuna basıldığında Jyeni satır kaldırılarak bu satıra bir sonraki satıra birleştirilir. Bunu bir sayımla da birleştirebilirsiniz, böylece düğmesine basmak 3J3 satırın tümünü birleştirir.


29
Başka bir cevapta belirtildiği gibi, gJVim'in kullanırken eklemeyi seçebileceği boşluklar eklemekten kaçınacaktır J.
Michael Mior

5
V(Görsel Çizgi Modu) 'nu kullanarak katılmak istediğiniz tüm satırları seçebilir Jveya 6gJ
13'te

İmleç konumunu korumak istiyorsanız :joinve :join!bu imleç konumunu koruyan satırları birleştirir ve birleşme noktasında boşluk bırakmazsanız. ayrıca şu şekilde eşleştirebilirsiniz: nnoremap <Leader>j :joing<cr>ve nnoremap <Leader>gj :join!<cr>.
SergioAraujo

82

Kesinlikle. Vim, \ n karakterini bir yeni satır olarak tanır, böylece sadece arama yapabilir ve değiştirebilirsiniz. Komut modu yazın:

:%s/\n/

1
Teşekkürler, ancak global bir arama ve değiştirme istemiyorum.
derekerdmann

16
% 'nin kaldırılması bununla ilgilenir. Sonra sadece imlecin üzerinde olduğu satırda olur. Alternatif olarak, aşağıdakiler gibi bir aralık belirleyebilirsiniz: 11,15s / \ n / (satır 11-15) veya:, + 7s / \ n / (bu satır ve sonraki yedi) veya: -3, s / \ n / (önceki üç satır ve bu) ... fikri
anladınız

1
Veya bir V-isual bloğu seçebilir ve yerine koyabilirsiniz.
Victor Sergienko

51

Normal modda üst satırdayken Shift+ tuşuna basın j.

Siz de bir sayı ekleyebilirsiniz, böylece 3Jen üst satırda tüm bu satırları birleştirebilirsiniz.


34

Bahsedilen diğer cevaplar gibi, (büyük harf) Jve search + replace \ngenellikle yeni satır karakterlerini şeritlemek ve satırları birleştirmek için kullanılabilir.

Ancak son satırdaki son satırsonu karakterinden kurtulmak için bunu Vim'de yapmanız gerekir:

:set noendofline binary
:w

1
Soru, bir dosyanın ortasındaki iki satırı birleştirmektir - bu yanıt, dosyanın sonundaki yeni satırı kaldırır, bu da sorduğum şey değil.
derekerdmann

3
Bu benim için çalıştı. Vim ile tek satırlık bir dosyanın sonunda bir satırsonundan kurtulmaya çalışıyordum.
Locane

Neden :set noendoflineonsuz çalışmıyor binary?
darw

32

Jsatırları tek bir boşlukla birleştirerek ekstra satır aralığı (varsa) siler. (Bazı istisnalar hariç: sonra /[.!?]$/iki boşluk eklenebilir; daha önce /^\s*)/boşluk eklenmez.)

Bu davranışı istemiyorsanız gJ, yeni satırı kaldırır ve boşluklarla akıllıca bir şey yapmaz.


10

Aşağıdakilerin tümü, imlecinizin ilk satırda olduğunu varsayar:

Normal eşlemeler kullanma:

3Shift+J

Ex komutlarını kullanma:

:,+2j

Kısaltması olan

:.,.+2 join

Aşağıdaki kısayol ile de girilebilir:

3:j

Daha da kısa bir Ex komutu:

:j3

2
Aralarında boşluk olmadan:j!3
SergioAraujo

10
set backspace=indent,eol,start

senin .vimrc içinde kullanmak sağlayacak backspaceve deleteüzerinde \nekleme modunda (yeni satır).

set whichwrap+=<,>,h,l,[,]

önceki moddaki LF ile X(sütun 1'deyken) normal modda silmenizi sağlar .


2

Muhtemelen ayarlarınıza bağlıdır, ancak bunu genellikle A<delete>

ASatırın sonuna nerede eklenir. Muhtemelen nocompatiblemod gerektirir :)


3
"Bunu genellikle A <silme> ile yaparım" Evet, bu yüzden buraya geldim; daha iyi bir yol bulmak;). Vim'in tüm noktası, ellerinizi ev sırasından hareket ettirmemektedir.
Luc

2
<CURSOR>Evaluator<T>():
    _bestPos(){
}

imleç ilk satırda

ŞİMDİ, NORMAL MODDA

shift+v
2j
shift+j

veya

V2jJ

: normal V2jJ


1

Yeni satırı kaldırmak istediğiniz satırda sadece A tuşuna (satır sonuna ekleyin, ekleme moduna geçirir) basar ve ardından sil tuşuna basın.


Ne yazık ki, bu benim için işe yaramıyor; kaçırdığım bir PuTTY ayarı olabilir.
derekerdmann

2
muhtemelen vi backspace seçeneği::help 'backspace'
glenn jackman

1

diğer kabuk araçlarını kullanmanın sakıncası yoksa,

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file

7
Bu biraz aşırıya kaçmış, değil mi?
derekerdmann

hayır değil. neden aşırıya kaçtığını düşünüyorsun? Vim içinde yapmak manüeldir. Her seferinde elle elle yapmak isteyip istemediğinize veya sadece bir astarda yapmak için bu tek astarları yürütmek isteyip istemediğinize bağlıdır. Vim bir editördür. Ve dosyaları işleyebilen herhangi bir araç temelde kılık değiştirmiş "editörlerdir".
ghostdog74

5
Dosyayı vim'de açmak ve kullanmak hala daha kolay ggVGJ.
Çok fazla php

elbette, verilerin her zaman bu şekilde değiştirilmesine ihtiyaç duyduğunuzda bunu daha kolay bulursanız Devam et. Ayrıca, bunu büyük bir dosyada yapmayı deneyin.
ghostdog74

Bir sürü dosyayı işlemiyorum; Sadece kod birkaç satır yoğuşma ile çalışıyorum.
derekerdmann

1

Sorun, görünmez olan char 0A'nın (\ n) birikmesi olabilir. 100. satırdan sonuna kadar temizlemek istediğinizi varsayalım:

ESC ve: yazmak (terminal komutanı)

:110,$s/^\n//

Bir vim komut dosyasında:

execute '110,$s/^\n//'

Açıklama: 110'dan sonuna kadar yeni satırla başlayan (boş) satırları arayıp kaldırın

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.