Kabukta Vi tuş bağlamalarını kullanırken mevcut Vi modunu nasıl gösterebilirim?


15

Vc tuşlarını tcsh kabuğumda kullanıyorum.

Şimdi, hangi vi modunda olduğumu bilmiyorum ( insertmod veya commandmod), bu da çok fazla hayal kırıklığına neden oluyor.

Herkes kabukta mevcut vi modunu göstermenin bir yolunu biliyor mu? (bilgi istemine veya başka bir şeye dahil ederek)

Yanıtlar:


4

Hangi modda olduğunuzu görsel olarak belirlemenin herhangi bir yolu olduğuna inanmıyorum, ancak davranışınızı biraz değiştirirseniz önemli olmayacaktır.

Komut modunda olmak istiyorsanız, bir komut yazmadan önce ESC tuşuna basın.

Ekleme modunda olmak istiyorsanız, içerik yazmadan önce ESC ve i tuşlarına basın.

ESC'ye çok fazla basacaksınız, ancak tanıştığım her vi kullanıcısı zaten bunu yapıyor.


1
Sorun şu ki, kabukta, ekstra ESC'ler yok sayılmıyor - ekstra bir ESC verdiğimde, bir komut yazdığımda (sola gitmek için h deyin), bip sesi verir ve hiçbir şey yapmaz.
sundar - Monica'yı geri yükle

2
"Ekstra ESC" ile, zaten komut modundayken ESC'ye basmak demek istiyorum - hangi modda olduğumu bilmediğim için çok şey yapıyorum.
sundar - Monica

Haklısın. O kadar uzun süredir kullandım ki, bu davranışı artık fark etmiyorum bile. Yine, en basit cevap. ESC ve h tuşlarına basarsanız ve hiçbir şey olmazsa, tekrar h tuşuna basın. Bunun başka bir soruya yol açtığını düşünüyorum. Vi tuş bağlarının 'komut' modundayken ESC tuşuna basmak neden bir sonraki karakterin doğru şekilde yorumlanmamasına neden oluyor? vi kendisi bunu yapmaz. ESC'yi 10 kez yazabilirim ve bir sonraki komut hala beklendiği gibi çalışıyor.
Bob Weber

Başka bir ipucu, zili kapatın. Sadece tanımladığınız nedenden ötürü inanılmaz derecede can sıkıcı - ve sekme tamamlandığında bip sesi çıkarıyor. Ortamınıza bağlı olarak bunu yapmanın çeşitli yolları vardır.
Bob Weber

1
Tamam, şu anda bu çözümü deniyorum. Caps Lock'u Escape ile eşlemek bunu uygulamayı kolaylaştırdı, ancak henüz ekleme modu için ESC-i'ye alışmadım. Umarım yakında yapacağım. > ESC ve h tuşlarına basarsanız ve hiçbir şey olmazsa, tekrar h tuşuna basın. Buradaki sorun oldukça sinir bozucu ve akışı çok bozuyor. Oluşturduğum komuta ek olarak düşünmek zorunda olduğum ekstra bir şey. Ben kas hafızamda oldukları ve vi düşünmek için daha az bir şey vermek için vi tuş bağlama tercih ederim - kendini amaçlayan bu tür ara ...
sundar - Reinstate Monica

3

Belgelere bir göz attım ve mevcut vi modunu algılamak ve görüntülemek için herhangi bir yol bulamadığımı söylemeliyim. Umarım hoş bir sürpriziniz olur ve birileri bir çözüm bulur, ama kesinlikle sorduğunuz şeyi yapmanın bir yolunu göremiyorum.

Sanırım bunu yapmanın bir yolu var, ama küçük bir sıkıntı için aşırı derecede abartılı bir şey ve bu soruyu sorduğunuzda aklınıza gelen şey olduğunu sanmıyorum. Bu doğruysa, şimdi okumayı bırakın ve hayatınızın tadını çıkarın.

OTOH, eğer bu gerçekten evcil hayvan huyunuzsa ve sizi çıldırtıyorsa ve gerçekten kesinlikle umutsuzca bu sorunu atmak istersiniz, işte benim bu konuda nasıl yapacağım hakkında bir fikrim var:

  1. W. Richard Stevens'ın UNIX (R) Ortamında Gelişmiş Programlamanın bir kopyasını edinin .
  2. Akımlar ve Terminal G / Ç bölümlerini okuyun .
  3. Kaynak kodunu , bir terminale yerleştirilebilen bir akış örneği içeren yukarıda belirtilen kitaba indirin .
  4. Esc tuş bileşimi (veya her iki mod değiştirme tuş basımı) için işleminizi uygulayın ve geçerli satırın zili veya arka plan manipülasyonu ile belirtin.

Kısacası Unix, terminal G / Ç'sini, aygıt sürücüsü ile kullanıcı işlemi arasında, modüllerin takılabileceği tam çift yönlü bir G / Ç akışı olarak uygular. Bir yığın olarak düzenlenmiştir, böylece istediğiniz kadar akışı katmanlayabilirsiniz. Enjekte edilen akışların toplamı terminal I / O davranışınızı yaratır.

Bir karakter girildiğinde, ilk modül onu inceler ve iletir (eğer isterse). Yanıt ters yöne geldiğinde, tekrar inceleme ve aktarma şansı elde eder. Bu, bir Ctrl-C'nin normal bir karakter tuşuna daha yüksek bir seviyede nasıl işlendiğini gösterir.

Bir akış modülünü uygulayan, çağrıldığında ön planda sessizce çalışan, tüm tuş vuruşlarını inceleyen ve ileten, önem verdiğiniz tuş vuruşlarında tercih ettiğiniz eylemi gerçekleştiren bir ikili dosya oluşturabilirsiniz. Tüm niyet ve amaçlar için, sanki kabuk üzerinde çalışıyormuş gibi görüneceksiniz. Oooh. Bu ikili dosyayı .tcshrc'nizin son (veya ilk veya herhangi bir) satırında çağırabilirsiniz ve orada olduğunu bile bilemezsiniz.

Burada iyi bir astar var , ama bu konuda çok fazla bir şey bulamadım, çünkü muhtemelen asalını geçti.


2

Bu sayfada , zsh içinde istediğinizi (ve daha fazlasını) ayarlayan oldukça ayrıntılı bir komut dosyası var . Belki de tcsh ile çalışmak için uyarlanabilir (o kabuğa çok aşina değilim).


Ben de tcsh'e aşina değilim, ama gösterdiğiniz sayfa zsh widget'larını (zle ile) kullanıyor. Diğer mermilerin buna sahip olduğunu düşünmüyorum, ama eğer yaparlarsa, bu kesinlikle işe yarayacaktır.
BrianH

1

Bu kesin problemi olan herkes için (benim gibi): stackoverflow'da bir çözüm buldum . Görünüşe göre readline'da bunun için yerel destek var, böylece aşağıdakileri sadece ekleyebilirsiniz ~/.inputrc:

set show-mode-in-prompt on

Ve gerçek karakter kullanımını özelleştirmek için:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"

0

Tcsh ile Komut Satırı Düzenleme

Komut satırını düzenlemek için,
en sık kullanılan iki metin düzenleyicisini (Emacs ve vi) temel alan iki ana mod vardır .

Vi bağlamaları ile ekleme ve komut modları arasında geçiş yapmanız gerekir ;
her modda farklı komutlar yararlıdır.

vi modunun iki alt modu vardır, ekleme ve komut modu.

  • Varsayılan mod ekleme şeklindedir .
  • Tuşuna basarak modlar arasında geçiş yapabilirsinizEsc .
  • Alternatif olarak, komut modunda,
    'a' (ekleme) veya 'i' (ekleme) yazmak sizi ekleme moduna döndürür
    .

Yukarıda zaten bağlı olan tcshözelleştirme sayfasında daha fazla not .


2
Bağlantılarınız telif hakkıyla korunan O'Reilly kitaplarına
gidiyor

0

Aynı problemi yaşadım ve yanlışlıkla çözümü buldum. Bu iş parçacığı eski olmasına rağmen, bir çözüm sunan başka bir web sitesi bulamadık, bu yüzden bu iş parçacığı üzerinde gönderme tamam varsayalım.

Terminal programınızın veya kabuğunuzun ayarlarını sıfırlamanız yeterlidir. Şu anda PuTTY kullanıyorum ve kaydedilmiş bağlantım için kaydedilmiş ayarlarımı sildim ve kaydedilmiş bir oturumu yeniden oluşturdum. Bir cazibe gibi çalıştı.

Bu yardımcı olur umarım!


0

Lütfen SO ile ilgili cevabımı görün . Bash 4.4 / Readline 7.0 Bu işlevsellik desteği eklemek olacak ve geçici de ben / Readline 6.3 Bash 4.3 sürümlerini yamalı yayınlanan ettik GitHub'dan .

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.