Vim di OSX: Bagaimana cara melakukan page-up / page-down / menuju EOL melalui file vim yang dibuka di terminal?

28

Dalam dempul, itulah yang terutama saya gunakan VIM, saya bisa melakukan hal berikut:

  • Halaman atas / bawah: Menggunakan tombol Page up / down asli Di Mac, alternatifnya adalah Fn + Atas / Bawah, yang tidak berfungsi di terminal (tidak menggulir di dalam file vim, tetapi menggulir buffer terminal)
  • Demikian pula, tombol Fn + kanan / kiri tidak membawa saya untuk memulai / mengakhiri jalur

Bagaimana cara meniru fungsi ini di Mac OS X?

TCSGrad
sumber
Ini dapat membantu memperjelas pertanyaan Anda jika Anda mengganti atau menambahkan "Fn + kanan / kiri" dengan "Rumah / Akhir", yang merupakan kombinasi Fn tersebut.
Chris Page

Jawaban:

48

Ini bukan pertanyaan mac khusus, ini benar-benar pertanyaan vi.

Dalam mode navigasi, ctrl-f menggulir ke bawah halaman dan ctrl-b menggulir ke atas halaman (pikirkan "F" orward dan "B" ack). Ctrl-d menggulir ke bawah setengah halaman, dan ctrl-u menggulung ke atas setengah halaman.

^ akan membawa Anda ke awal baris, dan $ sampai akhir. Saya tahu, saya tahu, tetapi ada alasan historis untuk itu.

Berikut ini lembar contekan yang sangat bagus pada kontrol vi. vi sedikit misterius, tapi begitu Anda menginternalisasi, itu adalah editor teks tercepat dan paling licin di dunia.

Dan Ray
sumber
1
"Ini bukan pertanyaan mac khusus, ini benar-benar pertanyaan vi." Sebagian besar tentang cara mengatur keymap aplikasi Terminal Mac OS X, tetapi ternyata bagian kedua dari pertanyaan, tentang start / end of line, sudah memiliki pemetaan di Terminal dan salah satu solusi yang mungkin adalah mengedit peta vi ke mengerti itu. Atau, peta keyboard Terminal dapat diedit.
Chris Page
16

Terminal preferensi default Terminal Shift- Page Updan Shift- Page Downke urutan karakter yang memberitahu program seperti Vim dan Emacs untuk menggulir ( ESC [ 5 ~dan ESC [ 6 ~).

Jika Anda ingin tombol-tombol ini mengirim urutan karakter ke terminal tanpa Shiftpengubah, Anda dapat menyesuaikan peta keyboard:

Terminal> Preferensi> Pengaturan> [profil]> Keyboard

Jika Anda melakukan ini, saya sarankan Anda membalikkan makna Shiftpengubah untuk kunci-kunci ini dengan menukar pemetaan untuk kunci yang bergeser dan tidak tergeser, sehingga perilaku alternatif masih tersedia. Juga, lihat menu View , yang berisi perintah gulir yang menggunakan Commandpengubah sehingga mereka tersedia terlepas dari peta keyboard terminal.

Demikian pula, Shift- Homedan Shift- Enddipetakan untuk pindah ke awal / akhir garis saat ini ( ESC [ Hdan ESC [ F). Urutan ini dipahami oleh Bash, tetapi Anda mungkin harus menyesuaikan Vim untuk memahaminya, atau mengedit pemetaan khusus untuk Vim. Vim, Emacs, dan beberapa program lain mengirim urutan pelarian untuk menempatkan terminal ke "Mode Kursor Aplikasi", di mana tombol Home / End mengirim ESC O Hdan ESC O F, tetapi Terminal (pada 10.9) tidak menerapkan perilaku ini. Jadi, Anda mungkin ingin mengubah peta keyboard untuk mengirim kode-kode lain ini (Bash juga memahaminya). (Di OS lain, Homedan Enddigunakan untuk start / end of line, Terminal menyediakan Shiftmodifier untuk simetri.)

Control- Left Arrowdan Control- Right Arrowjuga dipetakan ke urutan "pindah ke awal / akhir baris" secara default, meskipun urutannya berbeda dari yang dipetakan ke Shift- Homedan Shift- End. Alih-alih, mereka dipetakan ke urutan yang kompatibel dengan Emacs dan Bash ESC [ 5 Ddan ESC [ 5 C. Dengan asumsi ini tidak digunakan oleh Vim, pendekatan paling sederhana adalah menyesuaikan Vim untuk menerimanya, menggunakan ~ / .vimrc.

Perhatikan bahwa dalam versi MacOS yang lebih baru, Terminal tidak lagi memiliki pemetaan eksplisit untuk Homedan Enddalam preferensi secara default. Sebaliknya, ia memiliki perilaku dinamis di mana tombol secara otomatis memetakan untuk memulai / end-of-line ketika layar alternatif aktif — misalnya, ketika menggunakan aplikasi layar penuh seperti emacs, vim, layar atau tmux. Saat menggunakan program berorientasi garis seperti shell di layar utama, mereka terus menggulir tampilan terminal secara default. The Shiftpengubah membalikkan perilaku.

Chris Page
sumber
@MarkHu saya bahas dalam paragraf terakhir.
Chris Page
Seperti dibahas sebagian dalam paragraf terakhir, default mungkin berbeda / hilang di versi MacOS lainnya. Untuk 10.13.6, saya harus menambahkan \033[5~(dan ... 6.) Untuk PageDown / Up.
MarkHu
2

Solusi termudah dan terbaik adalah n+ , di mana njumlah baris yang ingin Anda turun, dan adalah tombol turun.

Saya secara teratur hanya melakukan 12+ dan 22+ .

T.Baik
sumber
1

Saya sudah terbiasa dengan Home / End membuat saya memulai dan mengakhiri baris dalam mode Insert (dari penggunaan di Windows dan saya pikir Linux), yang tidak didukung Mac. Ini sangat menjengkelkan karena ketika saya menggunakan vim pada sistem jarak jauh, saya juga tidak bisa dengan mudah melakukannya. Setelah beberapa percobaan dan kesalahan yang menyakitkan, saya datang dengan beberapa .vimrcbaris yang melakukan hal yang sama, dan akhirnya menemukan orang lain yang datang dengan solusi serupa di sini:

https://coderwall.com/p/fd_bea

Nikmati.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
pengguna1442960
sumber