Bagaimana cara membuat ⌘ ← dan ⌘ → bekerja untuk home / end combo untuk Terminal?

21

Mengapa fn- - (atau yang lain) melakukan home / end di Terminal tetapi - bekerja di tempat lain?

Jadi untuk memperjelas pertanyaannya adalah bagaimana membuat Terminal take Command+ dan untuk home and end?

Jackie
sumber

Jawaban:

21

Akan senyaman mungkin, Terminal tidak dapat dengan mudah menyediakan fungsionalitas yang Anda minta.

Alasannya adalah bahwa program yang berjalan di dalam Terminal memiliki aturan yang berbeda untuk memindahkan kursor ke awal / akhir baris, misalnya:

  • bash(dan kerang lainnya) menggunakan CtrlAdanCtrlE
  • vimenggunakan 0dan $/Shift4

Program lain dapat menggunakan tombol lain. Tidak ada kombinasi tombol universal untuk memposisikan kursor di awal / akhir baris.

Tentu saja, Terminal dapat menyimpan daftar kombinasi tombol untuk sejumlah program umum, memeriksa apa yang sedang berjalan dan mengirim kunci yang benar untuk Anda, atau dapat menyediakan item menu seperti Pindahkan Kursor Ke Awal Dari Garis Di Dalam Shell ⌘ ← lalu kirim CtrlAdibalik layar. Tapi saya kira insinyur Apple berpikir bahwa jika Anda menjelajah di wilayah CLI Anda tahu keistimewaannya.

Sebagai catatan tambahan, Terminal menyediakan Optiondan Optionyang berperilaku bashseperti yang Anda harapkan dan memindahkan kursor ke awal kata sebelumnya / berikutnya. Itu karena kombinasi tombol ini dipetakan ke Escbdan Escb(lihat man bash, bagian "Perintah untuk Memindahkan" untuk informasi lebih lanjut). Di vi, misalnya, hanya yang terakhir (jenis) yang berfungsi (pada akhir jawaban ini saya akan menunjukkan cara mengkonfigurasi viuntuk bekerja dengan Optiondan Option).

Tetapi berkat Automator, AppleScript dan alias bash Anda dapat dan bekerja dengan bash(dan mungkin kerang lainnya) dan vi.

Langkah pertama adalah memetakan dan ke CtrlAdan CtrlE. Pada langkah kedua, saya akan menunjukkan cara mengkonfigurasi viuntuk menghormati CtrlAdan CtrlE(yang, sebagai hasilnya, akan membuat vikompatibel dengan dan ).

Peta dan ke CtrlAdanCtrlE

  1. Di Terminal, buka Preferensi ...> Pengaturan> [profil aktif Anda]> Keyboard: masukkan deskripsi gambar di sini

  2. Tekan +, pilih "Kursor Kiri", "Control-Shift" sebagai pengubah dan tindakan "Kirim Teks:". Kemudian tekan CtrlA( \001akan muncul di bidang teks) dan konfirmasikan dengan OK: masukkan deskripsi gambar di sini

    (Dalam versi sebelumnya dari jawaban ini saya menggunakan "Shift" sebagai pengubah. Saya perhatikan bahwa pengaturan ini bertentangan dengan shift, yang menunjukkan tab Terminal sebelumnya, jika Anda tidak langsung dilepaskan . Menggunakan "Control-Shift" memperbaikinya.)

  3. Sekarang tambahkan kombinasi tombol untuk "Kursor Kanan", tetapi tekan CtrlE( \005akan muncul di bidang teks). Konfirmasikan dengan OK.

  4. Buka Automator (misalnya, tekan spaceuntuk membuka Spotlight dan ketik Automator ), pilih File> Baru dan pilih Service:

    masukkan deskripsi gambar di sini

  5. Seret Run AppleScriptke panel kanan: masukkan deskripsi gambar di sini

  6. Ketikkan skrip berikut:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 123 using {shift down, control down}
            end tell
        end tell
    end run

    dan simpan sebagai Move Cursor to Beginning of Line:

    masukkan deskripsi gambar di sini

  7. Ulangi langkah 4. hingga 6. dengan skrip ini:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 124 using {shift down, control down}
            end tell
        end tell
    end run

    dan simpan sebagai Move Cursor to End of Line:

    masukkan deskripsi gambar di sini

  8. Seperti inilah Terminal> Layanan sekarang:

    masukkan deskripsi gambar di sini

Konfigurasikan viuntuk menghormati CtrlAdanCtrlE

  1. Buka .bashrcdengan editor favorit Anda dan tambahkan baris ini:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    Dua mapperintah pertama memberitahu vimuntuk menafsirkan ControlEdan ControlAsebagai $dan 0, yang memindahkan kursor ke awal atau akhir baris, masing-masing.

    Dua mapperintah terakhir memberi tahu vimuntuk memindahkan kursor satu kata sekaligus seperti yang Anda harapkan ketika menekan optiondan Option.

Peringatan

Anda akan melihat bahwa ada jeda singkat antara saat Anda menekan atau dan saat kursor benar-benar bergerak.

Ingatlah bahwa ini hanya akan berfungsi untuk program yang menghormati CtrlA/ CtrlE, jadi Anda mungkin masih ingin mempelajari kombinasi tombol spesifik dari setiap program yang Anda gunakan di Terminal.

(Diuji pada macOS Sierra 10.12.4)

Jaume
sumber
3
Terima kasih atas jawaban terinci, apakah ada petisi untuk meminta Apple menyertakan tombol home / end pada desain ulang berikutnya :-)
Jackie
Aku senang bisa membantu.
jaume
Wow .. semua ini untuk mendapatkan jalan pintas yang
aneh
Ini adalah jawaban yang baik, tetapi dapat ditingkatkan dengan mengecualikan semua informasi asing tentang viyang merupakan aplikasi yang sama sekali berbeda dari terminal.
axiopisty
1
Itu trik yang bagus. Saya juga berhasil menjalankan AppleScript dengan mengirimkan kode kunci untuk "Rumah" dan "Akhir": "kode kunci 115" dan "kode kunci 119" "
Keymon
2

Tentu saja mungkin.

Pertama-tama, Anda dapat menggunakan alat gratis "Perintah Ganda" jika Anda memiliki keyboard windows dengan tombol HOME / END untuk membuat mereka berperilaku seperti seharusnya (awal / akhir baris).

Kedua, untuk terminal khusus, pergi ke preferensi, Keyboard, edit ikon / kunci yang terlihat seperti panah menunjuk ke kiri, pilih "kirim teks" dan ketik ctrl + a. Selesai!

Sama untuk tombol akhir ..

Jika Anda tidak memiliki keyboard PC, Anda dapat melakukan hal yang sama dengan kombinasi tombol lainnya.

George Katsanos
sumber