Menekan tombol panah menambahkan karakter dalam editor vi

188

Ketika saya mencoba menggunakan tombol panah dalam mode insert di vieditor karakter berikut sedang dimasukkan ke dalam editor:

  • karena saya mendapatkan B,
  • karena saya mendapatkan A,
  • karena saya mendapatkan D,
  • karena saya mendapatkan C.

Tolong bantu saya dalam menyelesaikan masalah ini.

bvb
sumber
3
Saya tertawa terbahak-bahak membaca judul;) Saya yakin ada XKCD untuk perasaan seram yang datang (untuk pengguna pemula) ketika tombol panah mencetak huruf.
ayu
1
Ini sangat sangat menakutkan;)
Kyle Bridenstine

Jawaban:

233

Jika Anda belum memiliki .vimrcfile di direktori home Anda, buatlah menggunakan ini:

vim ~/.vimrc

Tambahkan baris ini ke bagian atas file:

set nocompatible

Simpan file dan ini akan memperbaiki masalah Anda. :)

Gaurav Manchanda
sumber
1
Saya harus membuat file .exrc untuk vi, tetapi mengatur nocompatible bekerja dengan baik.
tgun926
25
Ada trik jika Anda menggunakan vibukan vim, Anda harus melakukan konfigurasi yang sama tetapi dalam ~/.exrcfile.
tzi
15
Bekerja. Tetapi mengapa perbaikan ini diperlukan? Mengapa secara default tidak menangani panah?
Mohit
6
Secara default, vi / vim diprogram untuk mengganti tombol panah dengan tombol h, j, k, l. Ini dilakukan agar Anda tidak harus pindah dari area tombol utama keyboard.
Gaurav Manchanda
10
masalah berikutnya adalah backspace, solusi: askubuntu.com/questions/296385/…
daVe
87

Instal vim -> Ini akan memperbaiki masalah.

sudo apt-get install vim

Ada banyak tutorial vim / vi yang bagus di youtube, atau web pada umumnya. Untuk masalah Anda, lihat di sini

Kemudian lanjutkan untuk membuka file seperti biasa :

vi desired-file
sthysel
sumber
bekerja untuk saya - meskipun tidak yakin mengapa ini berbeda dari vim yang saya luncurkan sebelumnya
Amos Folarin
6
Ini harus menjadi jawaban yang diterima (tetapi sepertinya tidak ada yang menerima). ini adalah cara termudah / terbersih untuk mendapatkan vim 'sepenuhnya dimodernisasi' ke konsol komputer (bukan terminal era tty / ANSI.
Lockszmith
ya saya setuju dengan Anda Lockzsmith, ini seharusnya jawaban yang diterima
niccolo m.
Ini berhasil untuk saya. Saya terkejut bahwa raspian hadir dengan versi vi / vim yang ia lakukan ... walaupun semua tutorial untuk itu memberitahu Anda untuk menggunakan nano, yang sulit untuk menyatakan bahwa vim benar-benar lebih baik daripada itu. Mungkin satu-satunya alasan saya menggunakan vim daripada nano adalah karena vim selalu ada di setiap mesin dan sepertinya peluang 50/50 apakah nano.
ArtOfWarfare
KOMPUTER BLEEPIN!
Chris
27

Dengan vi, saat mengklik iAnda mengaktifkan perintah untuk Menyisipkan teks.
Perintah ini memungkinkan Anda untuk memasukkan teks ke file Anda.
Dan benar, ketika mengklik:

  • di atasnya akan memasukkan "A",
  • di atasnya akan memasukkan "B",
  • ...

Sampai Anda menonaktifkan perintah ini.
Untuk menonaktifkan perintah di vi: cukup klik Esc
Dan kemudian Anda akan kembali normal menggunakan tombol panah Anda:

  • naik,
  • ke bawah,
  • ...

FYI, berikut adalah beberapa viperintah:
Dari sumber ini .

:xReturn berhenti vi , menulis file yang dimodifikasi ke file yang disebut dalam doa asli
:wqReturn berhenti vi , menulis file yang dimodifikasi ke file bernama dalam doa asli
:qReturn berhenti (atau keluar) vi
:q!Return berhenti vi meskipun perubahan terbaru belum disimpan untuk panggilan vi ini

pindahkan kursor ke bawah satu baris
pindahkan kursor ke atas satu baris
pindahkan kursor ke kiri satu karakter
pindahkan kursor ke kanan satu karakter

u batalkan apa pun yang baru saja Anda lakukan; toggle
. redo sederhana apa pun yang baru saja Anda lakukan

i masukkan teks sebelum kursor, sampai Esctekan
I masukkan teks di awal baris saat ini, sampai Esctekan
a tambahkan teks setelah kursor, sampai Esctekan
A tambahkan teks ke akhir baris saat ini, sampai Esctekan
o terbuka dan masukkan teks dalam baris baru di bawah garis saat ini, sampai Esctekan
O terbuka dan letakkan teks di baris baru di atas baris saat ini, hingga Escklik

r ganti karakter tunggal di bawah kursor (tidak Escperlu)
cw ubah kata saat ini dengan teks baru, dimulai dengan karakter di bawah kursor, hingga Esctekan
x hapus karakter tunggal di bawah kursor
Nx hapus karakter N, dimulai dengan karakter di bawah kursor
dw hapus kata tunggal dimulai dengan karakter di bawah kursor
C berubah (ganti) karakter pada baris saat ini, hingga Esctekan
D hapus sisa baris, dimulai dengan posisi kursor saat ini

dd hapus seluruh baris saat ini,
Ndd hapus baris N, dimulai dengan baris saat ini; misalnya, 5dd menghapus 5 baris
yy menyalin (yank, memotong) baris saat ini ke dalam buffer
Nyy copy (yank, memotong) N baris berikutnya, termasuk baris saat ini, ke dalam buffer
p menyisipkan baris (s) dalam buffer ke dalam teks setelah garis saat ini

0(nol) pindahkan kursor untuk memulai baris saat ini (yang dengan kursor)
$ pindahkan kursor ke akhir baris saat ini
w pindahkan kursor ke awal kata selanjutnya
b pindahkan kursor ke awal kata sebelumnya
:0Returnatau 1G pindahkan kursor ke baris pertama dalam file
:nReturnatau nG pindahkan kursor untuk baris n
:$Returnatau G memindahkan kursor ke baris terakhir dalam file

/string mencari ke depan untuk kemunculan string dalam
?string pencarian teks ke belakang untuk kemunculan string dalam
n pemindahan teks ke kemunculan berikutnya dari string pencarian
N pindah ke kemunculan berikutnya dari string pencarian dalam arah yang berlawanan

Boris
sumber
28
Tombol panah bawah memasukkan "B" bukan perilaku yang diharapkan. Tombol panah harus menggerakkan kursor ke atas dan ke bawah / kiri dan kanan terlepas dari mode penyisipan.
James Wong
2
@ JamesWong Sebenarnya, itu adalah perilaku yang diharapkan, karena begitulah awalnya Vi diprogram. VIM, (secara tidak resmi) penerus Vi, berada dalam mode Vi-kompatibel secara default, yang mencakup perilaku ini untuk tombol panah. Jadi kata "harus" di sini hanyalah subjektif, karena VIM sebenarnya melakukan apa yang sengaja diprogram untuk dilakukan.
villapx
2
@villapx - Tidak, itu bukan perilaku yang diharapkan. Perilaku yang diharapkan ditentukan oleh apa yang diharapkan oleh pengguna tipikal Anda. Orang biasa yang menggunakan vi / vim menggunakannya karena itulah yang diinstal pada server yang mereka perlu konfigurasi dengan cepat dan mereka tidak akan melakukan cukup banyak untuk repot-repot menginstal sesuatu yang lain. Hanya sedikit yang benar-benar memilih untuk menggunakan vim ketika diberi opsi, dan lebih sedikit yang benar-benar tahu semua fitur atau kebiasaan ini. Pengguna tipikal mengharapkan panah untuk memindahkan kursor - itu adalah perilaku yang diharapkan. Yang lainnya adalah perilaku tak terduga, dan harus ditulis sebagai bug untuk seberapa tak terduga itu.
ArtOfWarfare
@ArtOfWarfare Anda bebas menentukan "diharapkan" apa pun yang Anda pilih. Saya mendefinisikannya sebagai apa yang diharapkan oleh pembuat kode, karena mereka cukup jelas dalam manual VIM bagaimana seharusnya ini berperilaku ... dari :help compatible: "Secara default opsi ini aktif dan default Vi digunakan untuk Pilihan. Default ini dipilih untuk orang-orang yang ingin menggunakan Vim seperti Vi, dan bahkan tidak (ingin) tahu tentang opsi 'kompatibel'. "
villapx
@ ArtOfWarfare Pada dasarnya, penulis VIM jelas memiliki audiens yang spesifik dalam pikiran ketika menulis bagian kode ini, dan hanya karena audiens itu berbeda dari apa yang akan menjadi audiens Anda , tidak berarti itu bug. Anda dapat mengajukannya sebagai bug jika Anda mau, tetapi bersiaplah untuk dimaki oleh fundamentalis VIM (dan siapa pun yang benar-benar menghormati 'manual', penggemar RTFM a la).
villapx
17

Untuk menonaktifkan pencetakan huruf pada menekan panah dalam mode edit, Anda dapat melakukan hal berikut

vi $HOME/.exrc 

(buat file jika tidak ada) dan kemudian tambahkan baris set nocompatibleke sana dan simpan.

Aniket Thakur
sumber
Saya memasukkannya ke dalam .vimrc. Mengapa Anda memasukkannya ke dalam .exrc?
pauljohn32
Sumber-sumber Vim keduanya - lihat output :versionuntuk pesanan muatan (juga :h .exrcatau :h init). Saya kira seseorang mungkin menginginkan pengaturan untuk diterapkan baik dalam vi dan vim, atau bisa menjadi kekuatan kebiasaan belaka.
William Robertson
11

Ada tiga mode dalam editor vi yaitu:

  • mode perintah
  • mode input
  • mode default.

Ketika Anda membuka file, Anda berada dalam mode default. Sekarang jika Anda ingin pergi ke posisi tertentu dalam teks Anda, cukup gunakan tombol panah atau menggunakan h, j, k, lkunci. Catatan bahwa ini akan bekerja hanya jika Anda belum ditekan i(atau mode input lainnya memasukkan perintah seperti a, A, I).

Alasan 'B' mungkin karena tombol panah dalam mode input tidak berfungsi sebagai tombol panah, jadi cukup tekan Escuntuk masuk ke mode default kapan saja. Ketika bergeser ke mode input pers iatau a, dan untuk menavigasi cukup tekan itombol kunci dan penggunaan panah atau h, j, k, l.

ps_cool
sumber
7

Saya memiliki Masalah yang sama persis tetapi tidak hanya pada mesin lokal saya tetapi juga pada koneksi melalui dempul pada mesin sles di Win7 VM melalui penerima citrix. Host lokal dan host remote menunjukkan setelah menginstal ulang Ubuntu memiliki masalah yang sama persis.

Setelah mengetahui itu

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

Menyebabkan perilaku VI aneh ini saya menginstal paket-data konsol yang memecahkan masalah!

sudo apt-get install console-data
kitingChris
sumber
3

catatan:

Ada informasi yang baik di pos lain tetapi tidak ada pos yang mencoba menjelaskan mengapa perilaku ini terjadi. Banyak orang pasti akan tersandung pada ini di masa depan. Selain itu, dapatkah Anda menandai pertanyaan ini sebagai terselesaikan karena salah satu dari posting sebelumnya kemungkinan membantu Anda?


Berikut ini penjelasannya :

Vi adalah editor yang sudah ada sejak lama, dengan akar kembali ke sistem Unix. Ini alat yang bagus tetapi sudah diulang dan sekarang ada yang lebih baik. Vim ditulis kemudian dan iterasi itu. Orang biasanya menyebut vi sebagai 'vim-minimal' dan vim adalah versi "yang ditingkatkan" dari vi. Anda dapat memikirkannya seperti ini: vi adalah inti dan vim memperluasnya.

Kemungkinan Anda menemukan perilaku :

Agar Anda dapat menemukan masalah ini, Anda menekan " i " untuk masuk ke mode penyisipan dan kemudian menggunakan tombol panah Anda untuk menavigasi garis yang benar dan titik edit. Inilah yang menyebabkan masalah karakter tak terduga Anda.

Solusi 1 atau 2

1) vi someFileSaat menggunakan vi , pertama-tama pindahkan ke titik edit, lalu masuk ke mode penyisipan.

2) vim someFileCukup gunakan vim dari awal.

Saya tidak bisa cukup menekankan untuk membaca manual (halaman manual) atau menggunakan -h untuk bantuan. Setelah Anda menyesuaikan dengan pola di shell, halaman manual menjadi teman terbaik Anda. Contoh: man viatauman vim


Validasikan bahwa Vim diinstal .

Buka jendela konsol dan jalankan:

dpkg --list | grep vim

Jika Anda mendapatkan sesuatu yang mirip dengan ini, maka Anda bisa mulai menggunakan vim.

~ $ 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

Jika prompt perintah kembali tanpa apa-apa, maka vim tidak diinstal. Gunakan contoh di bawah ini untuk memperbarui repositori Anda dan kemudian instal vim.

sudo apt-get update
sudo apt-get install vim

Jika Anda menggunakan vi atau vim hanya ketika mencari di internet cara memperbaiki sesuatu dan Anda lupa mengetik vim, ada satu cara yang bisa Anda perbaiki untuk masa depan. Saya mengingatkan Anda untuk memperhatikan. Anda dapat menggunakan alias untuk menimpa vi dengan referensi ke vim sehingga apa pun yang Anda ketik di masa mendatang yang jarang, Anda akan mendapatkan vim tanpa "Ups!" saat. Anda selalu dapat menghapus alias nanti.

Jenis vim .bashrc. Pindah ke bawah ke baris kosong hanya dengan ~(atau ke baris lain yang dimulai dengan alias(jadi mereka dikelompokkan bersama) dan kemudian tekan tombol i untuk masuk ke mode -insert-. Pada baris yang terpisah, masukkan yang berikut ini:

alias vi='vim'

Tekan Esclalu ketik :wq. Sekarang Anda perlu memuat ulang file. Ketik source .bashrcShell lain yang terbuka setelah Anda melakukan pengeditan ini akan secara otomatis memuat file .bashrc.

D75
sumber
3

Semua penjelasan yang diberikan agak aneh. Saya telah menginstal vi tetapi tidak vim.

Memeriksa alternatif: /etc/alternatives/vi/usr/bin/vim.tiny

Begitu vijuga vim.tiny, dan itu menggunakan /etc/vim/vimrc.tiny.

Dan di dalam vimrc.tinykamu temukan baris berikut:

set compatible

Yang hampir merupakan satu-satunya hal dalam file ini. Perhatikan bahwa di /etc/vim/vimrcdalamnya sedang menggunakan nocompatible.

Jadi instal vim, atau ubah vimrc.tinyfile, atau buat sendiri ~/.vimrcyang seharusnya berisi baris:

set nocompatible
Pistol
sumber
1
Saya tidak yakin apa yang begitu aneh. Anda akhirnya menyarankan 1. instal Vim - askubuntu.com/a/220072/158442 , 2. membuat ~/.vimrcdan mengatur nocompatible: askubuntu.com/a/353944/158442 , atau 3. mengedit file sistem. Hanya saran untuk mengedit /etc/vim/vimrc.tinyyang baru, namun Anda menyebut jawaban aneh sambil menyarankan hal yang sama dengan mereka.
muru
1

Editor vi tradisional tidak mengenali tombol panah (... selingkuh). Ada dua solusi:

  1. gunakan vim bukannya vi
  2. gunakan h, j, k dan l untuk menavigasi (Anda tidak dapat menavigasi saat mengedit pada vitw tradisional.)
MadMike
sumber
Ini tidak benar. Cari aplikasi berbasis terminfo / termcap dan libcurses. Saya menggunakan vi sejak tahun 1990 di Xenix, SCO Unix, AIX, hpux lama, dan lainnya, dan pure-vi dari tahun 80-an sudah memiliki dukungan untuk pemetaan terminfo / termcap.
Luciano
@ james-wong baik maka saya harus ulangi jawaban saya. Untuk "pure vi di bawah Ubuntu tidak ..."
MadMike
... dan ini dimaksudkan sebagai komentar untuk @luciano
MadMike
1

Ini juga bisa disebabkan oleh TERMvariabel; atur contohnya seperti ini:

 export TERM=xterm
Jasper Nuyens
sumber
Ini memecahkan masalah bagi saya di mana jawaban lain tidak. Terima kasih!
greg
1

Pada beberapa sistem, nocompatibleopsi tidak tersedia, atau mungkin tidak memperbaiki masalah jika plugin merusak fungsionalitas tombol panah. Berikut ini solusinya ...

Edit .exrcfile untuk menyertakan baris berikut:

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

Atau, jika masalahnya hanya ada dalam mode normal, Anda dapat mengubah nmapdan melewatkan yang berikut ini a, sebagai berikut:

nmap! ^[OA ^[k

dan seterusnya.

Inilah kombinasi kunci yang diperlukan untuk memproduksinya (hanya menampilkan yang pertama):

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

Ini lolos dari mode edit, bergerak ke arah yang diinginkan, dan masukkan kembali mode edit. Ini diperlukan untuk mengatasi Vi membaca urutan escape sebagai urutan literal <ESC> <O> <A>, dll.

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

Dominic Comtois
sumber
1

Untuk VI buat atau edit file "~ / .exrc" atau VIM buat atau edit file "~ / .vimrc" atur atau tambahkan di baris.

set nocompatible

Pada saat penulisan ini ada pujian pada item yang paling banyak dipilih kedua yang bertanya-tanya mengapa entri mereka tidak diterima. Alasannya adalah ada host yang tidak mengizinkan menginstal editor lain. Bahkan kemudian vim kadang-kadang memiliki efek yang sama, jadi ada banyak info yang dapat digunakan dari dua entri teratas. Saya tidak bisa berkomentar semoga ini menjelaskan alasan mengapa tidak ada yang 100% benar 100% dari waktu.

tuxdalinuxpenguin
sumber
0

Pada mesin ini saya harus make sureyang

set nocompatible

adalah last entry in ~/.vimrc. Atau setidaknya salah satu entri terakhir, khususnya tidak ada lagi plugin yang dimuat setelahnya.

HTH

Stack
sumber
0

Untuk beberapa alasan, Ubuntu telah menghilangkan inisialisasi envvar HOME untuk root pengguna pada 18,04 VPS baru saya. Jika demikian, vi tidak dapat menemukan file .vimrc. Masalahnya tidak terjadi untuk pengguna normal (di / home /).

Untuk memeriksa variabel:

echo $HOME

Jika ini menghasilkan baris kosong, variabel tidak disetel. Masalahnya hilang setelah itu

export HOME=/root

Saya memindahkan perintah ke file /root/.bashrc (saya tidak tahu di mana ini biasanya diatur).

Erik
sumber