Vim Terjebak Dalam Mode Sisipkan

52

Saya telah menggunakan Vim selama beberapa bulan sekarang melalui host web saya (mereka memungkinkan akses dempul). Tiba-tiba, escapekuncinya menjadi tidak responsif. Saya tidak dapat memasukkan atau mode lainnya dengan hanya menekan escape. Saya harus menekan F1yang memunculkan bantuan dalam vim dan menendang saya ke mode perintah.

Saya paling yakin bahwa tombol escape pada keyboard saya berfungsi dengan baik karena semua pintasan windows saya yang menggunakan tombol escape beroperasi secara normal.

Saya tahu ini adalah pertanyaan yang konyol dan saya yakin ada banyak lagi yang perlu diperhatikan mengenai solusi. Yang benar-benar saya butuhkan adalah petunjuk yang kuat tentang ke mana harus mulai mencari.

Hal-hal yang mungkin membantu:

  1. Saya menggunakan vim melalui dempul
  2. Saya masuk menggunakan jailshell
  3. Saya bukan root
Retas Retas
sumber
apa pengaturan terminal Anda? yaitu apa sebenarnya variabel lingkungan TERM diatur ke (dalam shell jauh)?
quack quixote
$ TERM diatur ke 'xterm'
Levi Hackwith
Apakah Ctrl-[bekerja? Apa yang Anda dapatkan jika Anda menekan Ctrl-vlalu melarikan diri? Itu harus ditampilkan sebagai ^[.
Dijeda sampai pemberitahuan lebih lanjut.
Ctrl- [bekerja. Rock on! Ini menghemat banyak frustrasi. Apakah ada kemungkinan Anda bisa menjelaskan mengapa esctidak lagi berfungsi? Juga, silakan kirim komentar Anda sebagai jawaban agar saya dapat menerimanya.
Levi Hackwith
Pikiran pertama saya ketika membaca ini: "Oh, dia memecahkan tombol 'Keluarkan aku dari sini'"
Daniel

Jawaban:

16

Coba gunakan Ctrl-[sebagai ganti Esc.

Apa hasil dari:

python -c "print ord(raw_input('char '))"

ketika Anda menekan Escdan Enter? Seharusnya "27". Apa hasil dari menekan Ctrl-Vitu Esc?

Sudahkah Anda memeriksa semua pengaturan di Putty untuk melihat apakah itu masuk akal?

Apakah Anda menggunakan Bash pada sistem jarak jauh? Lihatlah output dari

bind -p | grep -i '\\e' | less

dan lihat apakah Anda melihat sesuatu yang tidak biasa. Apakah Anda memiliki file yang dipanggil ~/.inputrc? Lihatlah isinya untuk melihat apakah ada sesuatu yang tidak biasa.

Lihat ~/.vimrcdan lihat apakah semuanya baik-baik saja.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
Ctrl-c juga harus mengakhiri mode penyisipan ('[' kadang-kadang agak sulit untuk masuk ke beberapa keyboard)
akira
1
Saya menjalankan skrip python dan kembali sebagai string kosong. Bagaimana cara saya memperbaikinya? Saya menggunakan dempul.
Keith
@Keith: Apakah Anda sudah mencoba saran diagnostik lainnya?
Dijeda sampai pemberitahuan lebih lanjut.
ctrl + [bekerja untuk saya untuk alasan apa pun, tidak tahu apa yang saya lakukan untuk membuat vim saya macet.
Derek Adair
147

Saya telah salah menekan Ctrl+ s, dan terjebak dalam mode insert. Untuk keluar dari itu gunakan Ctrl+ q.

bhaskar
sumber
7
Itu bukan mode memasukkan itu XOFF. Anda dapat menonaktifkan kontrol aliran perangkat lunak dengan melakukan stty -ixon(menambahkannya ke Anda ~/.bashrc). Maka keystroke itu akan tersedia untuk terikat pada sesuatu yang lain. Secara default di Bash terikat forward-search-history(kebalikan dari Ctrl-r). Ctrl-q (Bash quoted-insert) juga akan tersedia.
Dijeda sampai pemberitahuan lebih lanjut.
@DennisWilliamson Bukankah .bash_profiletempat yang lebih baik? Tidak perlu mematikannya di shell non-interaktif, bukan?
Piotr Dobrogost
1
@PiotrDobrogost: "Ketika shell interaktif yang bukan shell login dimulai, Bash membaca dan mengeksekusi perintah dari ~ / .bashrc, jika file itu ada." .bash_profilehanya dieksekusi ketika Bash adalah shell login. "Jadi, biasanya, ~ / .bash_profile Anda mengandung baris if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
Dijeda hingga pemberitahuan lebih lanjut.
@ DennisWilliamson Anda benar. Yang ingin saya katakan adalah bahwa ada kemungkinan untuk menonaktifkan kontrol aliran perangkat lunak hanya di shell interaktif. Jika ini benar maka selanjutnya masuk akal untuk menemukan cara untuk mengetahui apakah shell bersifat interaktif dan menonaktifkan kontrol aliran perangkat lunak hanya dalam kasus ini.
Piotr Dobrogost
@PiotrDobrogost: Lihat jawaban saya untuk "Bagaimana saya bisa memeriksa bash jika shell berjalan dalam mode interaktif?"
Dijeda sampai pemberitahuan lebih lanjut.
4

Mungkin Anda menggunakan mode sisipkan .

'insertmode' 'im' 'noinsertmode' 'noim'
boolean (default tidak aktif)
Membuat Vim berfungsi dengan cara mode Insert adalah mode default. Berguna jika Anda ingin menggunakan Vim sebagai editor modeless. Digunakan untuk | evim |.
[...]
- Gunakan CTRL-Ountuk menjalankan satu perintah mode Normal | i_CTRL-O |). Ketika ini adalah pemetaan, ini dijalankan seolah-olah 'insertmode' tidak aktif. Mode normal tetap aktif sampai pemetaan selesai. - Gunakan CTRL-Luntuk menjalankan sejumlah perintah mode Normal, lalu gunakan Escuntuk kembali ke mode Sisipkan. Catatan yang CTRL-Lmenggerakkan kursor ke kiri, seperti halnya ketika 'insertmode' tidak diatur. | i_CTRL-L |

Saya menyarankan pengeditan ~/.vimrcuntuk menambahkan baris berikut:

set noinsertmode         "disable insert mode
SandRock
sumber
1
Dalam kasus saya terjebak dalam mode memasukkan karena saya tidak sengaja menggunakan `-y` di commandline Seperti yang dikatakan dalam manual: -y Mulai Vim dalam mode mudah, sama seperti executable disebut" evim "atau" eview ". Membuat Vim berperilaku seperti editor klik dan ketik. Untuk keluar dari "mode kemudahan" ini, gunakan saja <kbd> CTRL </kbd> + <kbd> l </kbd> (huruf kecil L) sebagaimana dikatakan oleh + SandRock
ton
0

Saya punya masalah ini, tetapi saya sadari itu dari tidak sengaja mengubah mode input SCIM ke "Other - RAW CODE". Saya mengubahnya kembali ke Bahasa Inggris / Keyboard dan tidak memiliki masalah lagi.

vim_user
sumber