Ok tuşlarına basmak, karakterleri vi editörüne ekler.


188

viEditörde insert modunda ok tuşlarını kullanmaya çalıştığımda editöre şu karakterler ekleniyor:

  • için ben, B olsun
  • için ben bir olsun,
  • için ben, D olsun
  • için bir C olsun

Lütfen bu sorunu çözmeme yardımcı olun.


3
Başlığı okumakta iyi bir gülüş yaşadım;) Ok tuşu harfleri yazdırdığında (acemi kullanıcılara) gelen ürkütücü duygu için bir XKCD olduğundan eminim.
vvy

1
Çok çok korkutucu;)
Kyle Bridenstine

Yanıtlar:


233

.vimrcAna dizininizde zaten bir dosya yoksa, bunu kullanarak bir tane oluşturun:

vim ~/.vimrc

Bu satırı dosyanın üstüne ekleyin:

set nocompatible

Dosyayı kaydedin ve bu sorunu sizin için çözmelidir. :)


1
Vi için bir .exrc dosyası oluşturmak zorunda kaldım ama uyumsuz bir şekilde çalıştığımı belirttim.
tgun926

25
Eğer kullanırsanız bir hile vardır viyerine vim, aynı yapılandırmayı yapmak zorunda ama ~/.exrcdosyanın.
tzi,

15
Çalışmış. Ama neden bu düzeltme gerekli? Neden varsayılan olarak okları işlemez?
Mohit

6
Varsayılan olarak, vi / vim, ok tuşlarını h, j, k, l tuşlarıyla değiştirmek için programlanmıştır. Bu yapılır, böylece klavyenin ana alanından hareket etmek zorunda kalmazsınız.
Gaurav Manchanda

10
Bir sonraki sorun geri adım
daVe

87

Install vim -> Bu sorunu çözecektir.

sudo apt-get install vim

Genelde web'de veya youtube'da birçok iyi vim / vi dersi var. Sorununuz için buraya bakınız

Ardından dosyaları her zamanki gibi açmaya devam edin :

vi desired-file

benim için çalıştı - bunun neden daha önce
fırlattığım vim'den

6
Bu kabul edilen cevap olmalıdır (ama kimse kabul etmiyor gibi görünüyor).
vim'i

evet sana katılıyorum Lockzsmith, bu kabul edilen cevap
olmalıydı

Bu benim için çalıştı. Raspian'ın yaptığı vi / vim sürümüyle geldiğine şaşırdım ... bununla ilgili tüm eğiticiler size vanodan gerçekten daha iyi olduğunu iddia etmek zordur. Muhtemelen nano yerine vim kullanmamın tek nedeni vim'in her makinede bulunması ve nano'nun olup olmadığına 50/50 şans gibi gelmesidir.
ArtOfWarfare

BLEEPIN 'BİLGİSAYAR!
Chris

27

İle vi, üzerine tıkladığınızda metni eklemeki için komutu etkinleştirin . Bu komut, dosyanıza metin eklemenizi sağlar. Ve sağ tıkladığınızda:


  • üzerine bir "A" ekleyecektir,
  • üzerine bir "B" ekleyecektir,
  • ...

Bu komutu devre dışı bırakana kadar .
Bir komutu devre dışı bırakmak için vi: üzerine tıklayın Esc
ve ardından ok tuşlarının normal kullanımını geri alacaksınız:

  • kadar gitmek,
  • Aşağı inmek,
  • ...

Bilginize, işte bazı vikomutlar:
Bu kaynaktan .

:xReturn vi çıkın , değiştirilmiş dosyayı yazma orijinal çağırma adlandırılmış dosyası için
:wqReturn vi çıkın orijinal çağırma adlandırılmış dosyası değiştirilmiş dosyayı yazma
:qReturn vi çıkın (veya çıkış)
:q!Return vi çıkın son değişiklikler bu vi çağrı için kaydedilmedi rağmen

hareket aşağı imleç bir satır
hareket imleç yukarı bir satır
hareket imleç bir karakter sola
hareket doğru bir karakter imleci

u az önce yaptığın şeyi geri al ; Basit bir geçiş
. kokan yaptığının ne olursa olsun

i insert kadar imlecin önce metni Escisabet
I insert kadar geçerli satırın başında metnin Escisabet
a eklemek kadar, imlecin arkasına metin Escisabet
A eklemek geçerli satırın sonuna kadar olan metni kadar Escisabet
o açık ve güncel sınırının altında yeni bir satır metni koymak kadar, Eschit
O açık ve kadar geçerli çizginin üzerinde yeni bir satıra metni koymak Eschit

r yerine imlecin (hayır altında tek bir karakter Escgerekli)
cw değiştirmek kadar, imlecin altındaki karakteri ile başlayan yeni metinle güncel sözcüğü Escisabet
x silmek imlecin altındaki bir tek karakteri
Nx silmek imlecin altındaki karakteri ile başlayan N karakterleri
dw silmek imleç altında karakterle başlayan tek kelime
C değişikliği Geçerli satırdaki karakterleri (değiştir), Escisabet edene kadar satırın kalanını
D sil , mevcut imleç konumundan başlayarak

dd Silmek tüm geçerli satırı
Ndd silin akım çizgisi ile başlayan N hatları; örneğin, 5dd 5 satır siler
yy kopyalama (yank, kesme) tamponu içine mevcut hat
Nyy kopya tampona, mevcut satır da dahil olmak üzere, bir sonraki N hatları (yank kesilmiş)
p yapıştırmak metinden sonra içine tampon maddesi içinde hat (lar) mevcut çizgi

0(sıfır) hareket imleç geçerli hat (imleç bir) başlatmak için
$ hareket akım hattı sonuna imleci
w hareket sonraki kelime başlangıcına imleci
b hareket sözcüğü önceki başlarına dayanan imleç
:0Returnveya 1G taşımak dosyasındaki ilk satıra imleci
:nReturnveya nG hareket imleç n satırı
:$Returnveya imleci dosyadaki son satıra G taşımak için

/string arama metin dizesinin bir oluşum için ileri
?string arama metin dizesinin bir oluşum için geri
n hareket arama kelimesi bir sonraki oluşumu için
N hareket ters yönde arama dizesi sonraki oluşumuna


28
"B" ekleyerek aşağı ok tuşu beklenen bir davranış değildir. Ok tuşları, imleç modundan bağımsız olarak imleçleri yukarı ve aşağı / sola ve sağa hareket ettirmelidir.
James Wong

2
@JamesWong Aslında, Vi'nin başlangıçta programlandığı şekilde bir davranış olması bekleniyor. VIM'ın (gayri resmi olarak) halefi, V'in halefi, ok tuşları için bu davranışı içeren varsayılan olarak Vi uyumlu moddadır. Bu yüzden, burada “gerekir” kelimesi, özneldir, çünkü VIM aslında yapmak için programlanmış olan şeyi yapıyor.
villapx

2
@villapx - Hayır, beklenen davranış değil. Beklenen davranış, tipik kullanıcınızın beklediği şekilde tanımlanır. Vi / vim kullanan tipik bir kişi onu kullanıyor çünkü bir sunucuya hızlı bir şekilde yapılandırılması gereken ve başka bir şey yüklemekle uğraşmaya yetmeyecekleri bir sunucuya kurulu olanlar. Bir seçenek verildiğinde çok azı aslında vim kullanmayı seçiyor ve daha az kişi bu özellikleri veya tuhaflıkları gerçekten biliyor. Tipik kullanıcı okları imleci hareket ettirmeyi bekler - beklenen davranış budur. Başka bir şey beklenmeyen davranışlardır ve ne kadar beklenmedik olduğu konusunda bir hata olarak yazılmalıdır.
ArtOfWarfare

@ArtOfWarfare Seçtiğiniz ancak "beklenen" tanımlamakta özgürsünüz. Kodun yazarı tarafından beklenenin ne olduğunu, VIM el kitabında bunun nasıl davranması gerektiğini açıkça belirttiğim gibi tanımlıyorum :help compatible: ": Bu seçenek varsayılan olarak açık ve Vi varsayılanları Bu varsayılan, Vim'i Vi gibi kullanmak isteyenler ve 'uyumlu' seçenek hakkında bir şey bilmek bile istemiyorlardı. "
villapx

Bu kod bölümünü yazma ve sadece bu seyirci neyi farklı olduğu için zaman @ArtOfWarfare Temelde, VİM yazar açıkça aklınızda belirli bir seyirci vardı senin seyirci olacağını, bu bir hata olduğu anlamına gelmez. İsterseniz bir hata olarak dosyalayabilirsiniz, ancak VIM köktendincileri (ve aslında 'el kitabına, bir RTFM meraklılarına saygı duyan herkes) tarafından yalınlanmaya hazır olun.
villapx

17

Düzenleme modunda oklara basıldığında harflerin yazdırılmasını devre dışı bırakmak için aşağıdakileri yapabilirsiniz

vi $HOME/.exrc 

(yoksa dosya oluşturun) ve sonra satır ekleyin set nocompatibleve kaydedin.


Bunu .vimrc içine koydum. Neden .exrc içine koydun?
pauljohn32

Her ikisi de Vim kaynakları - :versionyük emri çıkışına bakınız (ayrıca :h .exrcveya :h init). Birinin hem vi hem de vim'de uygulanacak bir ortam isteyebileceğini ya da alışkanlık kuvveti olabileceğini düşünüyorum.
William Robertson

11

Vi editöründe üç mod vardır:

  • komut modu
  • giriş modu
  • varsayılan mod.

Bir dosyayı açtığınızda, varsayılan moddasınızdır. Şimdi, senin metninde belirli bir konuma gitmek sadece ok tuşlarını veya kullanımını kullanmak istiyorsanız h, j, k, ltuşları. Eğer basıldığında değil bu sadece kullanılacağını unutmayın i(veya başka bir giriş modu gibi komutu girerek a, A, I).

'B' nedeni, giriş modundaki ok tuşlarının ok tuşları olarak işlev görmemesi olabilir, bu nedenle Escistediğiniz zaman varsayılan moda geçmek için düğmesine basın . Giriş modu basına kaydırmaya zaman iya ave gezinmek için sadece basın ianahtar ve kullanım ok tuşlarını veya h, j, k, l.


7

Tam olarak aynı Sorunu yaşadım ama sadece yerel makinemde değil, Win7 VM'de bir citrix alıcısı üzerindeki bir sles makinesindeki macunla yapılan bağlantılarda da. Hem yerel ana bilgisayar hem de uzak ana bilgisayar, Ubuntu'nun yeniden yüklenmesinden sonra aynı sorunu yaşadıklarını göstermektedir.

Bunu öğrendikten sonra

$ localectl list-keymaps 
Couldn't find any console keymaps.

Bu garip VI davranışına neden oluyor Bu sorunu çözen paket veri paketini yükledim!

sudo apt-get install console-data

3

Not:

Diğer yayınlarda iyi bilgiler var ancak yayınların hiçbiri bu davranışın neden olduğunu açıklamaya çalışmadı . Gelecekte pek çok insan bu konuda yanılmak zorundadır. Ayrıca, önceki yazıların herhangi birinin size yardımcı olabileceğinden bu soruyu çözülmüş olarak işaretler misiniz?


İşte bir açıklama :

Vi , uzun süredir Unix sistemlerine kök salmış bir editör. Bu iyi bir araç ama yinelenmiş ve şimdi daha iyi. Vim daha sonra yazılmış ve bu yineleme. İnsanlar genellikle vi'yi 'vim-minimal' olarak adlandırır ve vim, vi'nin "geliştirilmiş" bir versiyonudur. Bunu şöyle düşünebilirsiniz: vi'nin özü ve vim bunun üzerine yayılıyor.

Muhtemelen davranışı nasıl keşfettiğin :

Bu sorunu keşfedebilmeniz için, ekleme moduna girmek için " i " düğmesine bastınız ve sonra doğru satır ve düzenleme noktasında gezinmek için ok tuşlarını kullandınız. Beklenmedik karakter sorununa neden olan şey bu.

Çözüm 1 veya 2

1) vivi someFile kullanırken , önce düzenleme noktasına gidin, ardından ekleme moduna girin.

2) vim someFileSadece baştan vim kullanın .

El kitabını (man sayfalarını) okumak veya yardım için -h kullanmak için yeterince stres kullanamıyorum. Kabuktaki kalıplara uyum sağladığınızda, man sayfaları en iyi arkadaşınız olur. Örnek: man viveyaman vim


Vim'nin kurulu olduğunu doğrulayın .

Bir konsol penceresi açın ve şu komutu çalıştırın:

dpkg --list | grep vim

Buna benzer bir şey alırsanız, sadece vim kullanmaya başlayabilirsiniz.

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

Komut istemi hiçbir şey olmadan geri dönerse, vim kurulu değildir. Depolarınızı güncellemek için aşağıdaki örnekleri kullanın ve ardından vim'i yükleyin.

sudo apt-get update
sudo apt-get install vim

Sadece internette bir şeyi nasıl düzeltirken yazmayı unutursanız ve yazmayı unutursanız, vi veya vim kullanmanızın şanssız olduğu durumlarda vim, gelecek için düzeltebileceğiniz bir yol vardır. Dikkatini vermen için seni uyarıyorum. Vim'e atıfta bulunmak için vi'nın üzerine yazmak için takma ad kullanabilirsiniz, böylece nadir gelecekte ne yazdığınız önemli değil, bu "ayy!" Olmadan vim elde edersiniz. an. Bir takma adı daha sonra her zaman silebilirsiniz.

Yazın vim .bashrc. Boş satırın altına sadece ~(veya birlikte başlayan başka bir satıra (veya aliasbirlikte gruplandırılmış)) gidin ve ardından -insert moduna girmek için i tuşuna basın. Kendi ayrı satırında aşağıdakini girin:

alias vi='vim'

Tuşuna basın Escve sonra yazın :wq. Şimdi dosyayı yeniden yüklemeniz gerekiyor. Tip source .bashrcEğer bu düzenlemeler otomatik Bashrc dosyasını yükleyecek yaptıktan sonra açılır Başka kabuk.


3

Verilen tüm açıklamalar biraz tuhaf. Vi var ama vim yüklü değil.

Alternatifleri kontrol etme: /etc/alternatives/vi/usr/bin/vim.tiny

Yani violup vim.tiny, ve kullandığı /etc/vim/vimrc.tiny.

Ve vimrc.tinysende şu satırı bul:

set compatible

Neredeyse bu dosyadaki tek şey. /etc/vim/vimrcİçinde olduğunu unutmayın nocompatible.

Öyleyse ya vim'i kurun ya da vimrc.tinydosyayı değiştirin ya ~/.vimrcda satırı içermesi gereken bir tane oluşturun :

set nocompatible

1
Ne kadar tuhaf olduğundan emin değilim. Vim - askubuntu.com/a/220072/158442 , 2. oluşturma ~/.vimrcve ayarlama nocompatible: askubuntu.com/a/353944/158442 , veya 3. bir sistem dosyasının düzenlenmesi. Yalnızca düzenleme önerisi /etc/vim/vimrc.tinyyenidir, ancak siz de onlarla aynı şeyi önerirken cevapları tuhaf olarak adlandırırsınız.
muru

1

Geleneksel vi editörü ok tuşlarını tanımıyor (… haksız). İki çözüm var:

  1. vi yerine vim kullanın
  2. gezinmek için h, j, k ve l tuşlarını kullanın (geleneksel vi btw'de düzenleme yaparken gezinemezsiniz.)

Bu doğru değil. Terminfo / termcap ve libcurses tabanlı uygulamaları arayın. 1990'dan beri Xenix, SCO Unix, AIX, eski hpux ve diğerlerinde vi kullanıyorum ve 80'lerden itibaren saf-vi zaten terminfo / termcap eşlemelerini destekliyor.
Luciano

@ james-wong öyleyse cevabımı tekrar yazmalıyım. "Ubuntu altındaki saf vi ..." demek için
MadMike

... ve bu lucuciano için bir yorumdu
MadMike

1

Bu TERMdeğişkene bağlı olabilir ; örneğin şöyle ayarlayın:

 export TERM=xterm

Bu benim için diğer cevapların olmadığı problemi çözdü. Teşekkürler!
greg

1

Bazı sistemlerde, nocompatibleseçenek kullanılamaz veya bir eklenti ok tuşunun işlevselliğini bozarsa sorunu çözemeyebilir. İşte bir geçici çözüm ...

.exrcAşağıdaki satırları dahil etmek için dosyayı düzenleyin:

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

Veya sorun yalnızca normal modda mevcutsa nmap, aşağıdakileri değiştirebilir ve atlayabilirsiniz a:

nmap! ^[OA ^[k

ve bunun gibi.

İşte bunları üretmek için gereken anahtar kombinasyonlar (sadece birincisini göstererek):

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

Bu düzenleme modundan kaçar, istenen yönde hareket eder ve düzenleme modunu yeniden uygular. Vi'nin kaçış dizisini değişmez bir <ESC> <O> <A> vs. dizisi olarak okumasını engellemek için bu gereklidir.

Kaynak: https://hea-www.harvard.edu/~fine/Tech/vi.html


1

VI için "~ / .exrc" dosyasını oluşturun veya düzenleyin veya VIM "~ / .vimrc" dosyasını oluşturun veya düzenleyin veya çizgiye ekleyin.

set nocompatible

Bu yazının yazıldığı tarihte, en çok oy alan ikinci maddeye girişlerinin neden kabul edilmediğini merak eden övgüler var. Bunun nedeni, diğer editörlerin kurulmasına izin vermeyen ana bilgisayarlar olmasıdır. O zaman bile vim bazen aynı etkilere sahiptir, bu yüzden ilk iki girişten bir sürü kullanılabilir bilgi vardır. Bununla birlikte yorum yapamam, ancak umarım bu, hiçbirinin% 100 doğru olmadığının nedenlerini temizler.


0

Bu makinede ben zorunda make sureolduğunu

set nocompatible

olduğunu last entry in ~/.vimrc. Veya son girişlerden en az biri, özellikle daha sonra eklenti yüklenmez.

HTH


0

Nedense, Ubuntu yeni 18.04 VPS'mde kullanıcı kökü için envvar HOME'u başlatmayı ihmal etti. Bu durumda, vi .vimrc dosyasını bulamıyor. Sorun normal kullanıcılar için oluşmaz (/ / / / in / home).

Değişkeni kontrol etmek için:

echo $HOME

Bu boş bir satırla sonuçlanırsa, değişken ayarlanmaz. Sorun sonra gitti

export HOME=/root

Komutu /root/.bashrc dosyasına taşıdım (bunun genellikle nerede olduğunu bilmiyorum).

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.