Vi'daki kontrol karakterlerini (^ @, ^ M, ^ I…) arayın ve değiştirin


14

Bu satırı /proc/some_proc_id/cmdlineubuntu makinemden kopyaladım ,

java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@

Her nasılsa, boşluk karakterleri ^@vi. Komutu kullanarak boşluk karakterleriyle değiştirmeyi denedim,

:%s#^@# #g

Ama diyor ki pattern not found ^@,.

Özellikle karat sembolü ile başlayan özel karakterlerin yerini nasıl alabilirim?


Kullandığınız terminal tipi nedir?
Ed Heal

bazen TERMve birçok kez, buscreen

Kullandığınız terminal programı nedir ve TERMortam değişkeni doğru ayarlanmış mı?
Ed Heal

Yanıtlar:


15

Her nasılsa, boşluk karakterleri ^@vi.

Öyle değil vi. Her ne kadar argümanlar arasında boşluklar olan kabuklara komut satırları yazsanız da, komut satırları aslında uzun bir boşlukla ayrılmış dize değil, dahili olarak dizelerin ayrı dizileridir. Kabuk, komut başlatılmadan önce komut satırını bağımsız değişken dizelerine ayırdı.

C'de dizeler NUL karakterleriyle sonlandırılır ve dizeler olarak gösterilir ^@.

Özellikle karat sembolü ile başlayan özel karakterlerin yerini nasıl alabilirim?

Bu karakterleri yazmak için, harflerin önüne sonraki karakter için Control- öneki eklemelisiniz v.

Örneğin bu durumda: Control- vardından Control- @.

Sıradan sonraki karakterleri tanıtan özel karakter normalde Control- vancak aslında yapılandırılabilir. Tip stty -abunun için ayarlanır öğrenmek için. lnextÇıktıda arayın .


yazı bilgilendirici .. ama sorumun gerçek çözümü karat sembolünden kaçmaktır :%s#^@##g.

1
Orada çünkü @MadhavanKumar Sen şapka sembolü kaçış yok olduğu hiçbir şapka sembolü. Gerçekten gerçek bir kontrol karakteri. ^letterbunun için görsel bir gösterimdir, gerçek bir işaret yoktur. Ve evet, kontrol karakterinden kaçmanız gerekiyor, Ctrl-V bunu klavyeden nasıl yaptığınız. En çok her yerde çalışır. Diğer cevap vi, kontrol karakterini yazmak zorunda kalmamak için komut satırına özgü bir alternatif içerir .
Celada

@MadhavanKumar Terminaliniz NUL karakterlerini iki karakterli dize olarak görüntülüyorsa ^@ve bunu kopyalayıp yapıştırdıysanız, vi'daki bu iki karakterli dizeyi \^@temsil etmek için kullanın . Birçok yazılım “özel işlevini kullanmak yerine bir sonraki karakteri tam anlamıyla yorumlamak” için ters eğik çizgi kullanır.
Gilles 'SO- kötü olmayı bırak'

@Gilles, haklısın .. Celada'ya iletmeye çalıştığım şey budur ....

4

Bu sembol ASCII değeri 000 olan bir NULL karakteri temsil eder.

Deneyebilirsiniz:

:%s/\%x00/ /g

Alternatif:

@ Sembolünün 2tuşun üstünde olduğu bir klavyede (teşekkürler Celada) şunları yapabilirsiniz:

  • %s/<CTRL-2>/ /g (PC'de)

  • %s/<CTRL-SHIFT-2>/ /g (Mac'te)

burada , PC'yi <CTRL-2>ilk önce aşağı CTRLdoğru bastırın, vurun 2, bırakın CTRL.

ve <CTRL-SHIFT-2>önce controlMac'te basılı tutulur, basılı tutulur shift, Mac'te basılı tutulur, basılı tutulur, vurulur 2, serbest bırakılır controlve shift.

Son olarak, her iki komut %s/^@/ /gda ekranda görünmelidir . ^@tek bir karakter değil demektir ^ardından @sadece yazın değil, böylece ^ve @yukarıdaki komuta üst üste.

Bu komut tüm ^@karakterleri boşluk karakterleriyle değiştirir.

( Kaynak )


"PC" derken Windows mu demek istediniz?
Sparhawk

1
CTRL-2 ve CTRL-SHIFT-2, yalnızca tuşun @üstünde olduğu klavye düzenlerinde anlamlıdır 2.
Celada

@Sparhawk: Hayır, linux bilgisayar demek istiyorum. :-)
erik

Neden CTRL? CTRL'nin bir anahtarın farklı anlamı arasında geçiş yapmak için kullanılan anahtar olduğu bir sistem görmedim. Bu normalde SHIFT.
terdon

Garip (belki bir vim hatası?), Ama işe yarıyor. Genellikle ctrl + üst karakter + 2 (bir kullanıcı klavyesinde) olmalıdır. Ayrı bir soru olarak sorun veya vim geliştiricilerine sorun. Her neyse, Celada'nın cevabı kontrol karakterleri için daha genel.
erik

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.