Remap "Home" dan "End" ke awal dan akhir baris

326

Sebagian besar waktu komputasi saya dihabiskan di Linux (dengan waktu sesekali di Windows). Pada platform ini tombol Homedan Enduniversal melompat ke awal atau akhir dari garis saat ini.

Saya secara bertahap mulai terbiasa menggunakan satu komputer Apple dalam hidup saya, tetapi masih membuat frustrasi daripada tombol-tombol ini tampaknya terikat pada awal dan akhir dokumen dan sepertinya tidak ada kunci sama sekali untuk baris tersebut. tindakan berbasis.

Pertanyaan saya:

  1. Apakah ada ikatan kunci yang ada yang saya lewatkan untuk awal dan akhir baris? (Saya kebanyakan menggunakan Terminal, Chrome dan LibreOffice)
  2. Apakah ada cara untuk mengubah fungsi tombol-tombol ini ke fungsi yang saya kenal? Saya bersedia menyerahkan versi berbasis dokumen yang sepertinya tidak banyak berguna bagi saya.

Juga dua peringatan:

  1. Saya bukan satu-satunya pengguna di sistem. Akan lebih baik jika pengaturan pengguna saya tidak merusak pengalaman orang lain. Jika ini tidak mungkin, saya pikir saya mungkin memiliki preferensi terkuat!
  2. Saya memang menggunakan banyak bahasa dan beralih di antara tata letak keyboard, sehingga solusi apa pun diharapkan dapat berfungsi bahkan ketika beralih di antara beberapa tata letak keyboard.
Caleb
sumber
1
Perhatikan bahwa ketika saya akhirnya menemukan solusi dan menjawab pertanyaan saya sendiri, saya terbuka untuk solusi yang lebih mudah atau lebih fleksibel. Juga proses menemukan ini tidak jelas. Misalnya di mana Anda menemukan kode kunci dan nama tindakan jika saya ingin memetakan lagi kunci? Jangan ragu untuk menambahkan jawaban jika Anda memiliki pengetahuan yang relevan!
Caleb

Jawaban:

304

Cara pintas default untuk pindah ke awal atau akhir garis (terbungkus) adalah dan . dan atau Adan Epindah ke awal atau akhir dari baris yang tidak terbuka (atau paragraf). dan bergerak mundur / maju dengan kata-kata, dan semua ini kompatibel dengan menahan Shiftuntuk memilih selama gerakan yang sesuai.

Anda dapat memetakan kembali rumah dan berakhir dengan membuat ~/Library/KeyBindings/dan menyimpan daftar properti seperti ini sebagai DefaultKeyBinding.dict:

{
    "\UF729"  = moveToBeginningOfLine:; // home
    "\UF72B"  = moveToEndOfLine:; // end
    "$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
}

Sebagian besar ikatan tombol untuk mengedit teks di OS X didefinisikan dalam /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

Menerapkan perubahan memerlukan pembukaan kembali aplikasi. DefaultKeyBinding.dict diabaikan oleh beberapa versi lama Xcode (berfungsi dengan versi terbaru 6.3.1), Terminal, dan banyak aplikasi lintas platform.

Lihat Cocoa Text System dan situs web saya untuk informasi lebih lanjut tentang ikatan kunci yang dapat disesuaikan.

Pengikat kunci terminal dapat disesuaikan di Preferensi> Pengaturan> Keyboard. \033OHbergerak ke awal garis dan \033OFke akhir garis.

Di Eclipse, binding kunci harus dimodifikasi di Preferensi> Umum> Kunci. Anda perlu memodifikasi binding standar untuk perintah Line Start dan Line End (ganti ⌘ ← dengan ↖ dan ⌘ → dengan ↘). Agar seleksi berfungsi, juga modifikasi Select Line Start dan Select Line End .

PS: Anda mungkin perlu keluar dan masuk lagi agar ~/Library/KeyBindings/DefaultKeyBinding.dictperubahan diterapkan.

Lri
sumber
1
Info berguna tentang pemetaan kunci - Saya telah menggunakan ini dengan BetterTouchTool (komersial), lihat jawaban ini .
RichVel
3
Ini tidak berfungsi di sebagian besar aplikasi menurut pengalaman saya. Lebih baik menggunakan Karabina-Elements.
Timmmm
3
Ini bagus karena berfungsi di Terminal, iTerm2, Chrome, Sublime & Outlook. Alternatif (Karabina) kurang bagus karena memetakan "Rumah" ke Command + LeftArrow, yang sebenarnya mengganti windows di Terminal. Anda harus ingat untuk memulai kembali semua aplikasi setelah menyimpan file .dict.
Will Sheppard
1
Ini tidak berfungsi dengan vim
MohitC
2
Pengaturan ini berfungsi untuk saya di Mac OS Mojave dengan keyboard eksternal yang terhubung.
jdhao
106

Saya saat ini di Lion 10.7.4, dan untuk beberapa alasan aneh mengedit ~/Library/KeyBindings/DefaultKeyBinding.dicttidak berhasil untuk saya.

Saya telah menemukan bahwa addon Preferensi Sistem KeyRemap4MacBook (yang sekarang disebut Karabiner ) berfungsi dengan sangat baik, dan Anda juga dapat memetakan kembali berbagai kunci dengan itu, tanpa harus mengedit file teks apa pun. Misalnya mengubah tombol naik / turun halaman sehingga kursor juga mengikuti pada halaman atas / bawah.

Cukup unduh addon, dan di panel System Preferences, jelajahi For PC Usersbagian tersebut, dan periksa Use PC Style Home /End.

Catatan, saya memilih (Change Home to Command+Left)bukan (Change Home to Control+A), seolah-olah saya memilih yang pertama, dan jika garis dibungkus, rumah akan membawa saya ke awal garis yang terbungkus, beberapa baris di atas, alih-alih membawa saya ke awal garis saat ini.

KeyRemap4MacBook

jklp
sumber
9
Karabiner hebat dan juga open source
Jedidja
2
Dengan 10.10.5, saran lain tampaknya tidak berfungsi, tetapi Karabiner (nama baru untuk KeyRemap4MacBook - berfungsi pada semua produk Mac) berfungsi dengan baik, dan tidak perlu memulai ulang agar perubahan diterapkan. Sangat membantu untuk noob Mac ini; semoga orang lain juga mendapat manfaat.
Ralph J
1
Sampai hari ini, "Karabiner tidak bekerja pada macOS Sierra saat ini."
james.garriss
2
@ james.garriss Cobalah Karabiner-Elements - penulis yang sama meskipun ditulis ulang dari bawah ke atas untuk mendukung Sierra (masih dalam pengembangan sehingga masih sedikit kasar) - github.com/tekezo/Karabiner-Elements
jklp
5
@jklp Sayangnya fungsi yang diperlukan untuk memetakan kembali tombol Home dan End pada keyboard yang diperluas Apple belum tersedia di Karabiner Elements. Saya pribadi tampaknya memiliki memori otot untuk Ctrl-a, Ctrl-e ketika bekerja di konsol, tetapi ketika bekerja di aplikasi GUI seperti Sublime, sangat sulit untuk diingat. Untuk Sublime (khusus) ada solusi, namun: coderwall.com/p/upolqw/…
Ville
43

Berkat artikel ini , saya menemukan cara untuk mengikat kembali Homedan Endtombol untuk tindakan berbasis garis pada basis per pengguna yang bekerja di seluruh tata letak keyboard.

Anda perlu membuat file kamus dengan kode kunci dan perintah baru untuk memetakan, tetapi pertama-tama pastikan folder tempat ini akan ditempatkan ada dengan membuka Terminal dan menjalankan:

$ mkdir -p ~/Library/KeyBindings

Kemudian buat atau edit file di ~/Library/KeyBindings/DefaultKeyBinding.dict. Jika tidak ada sebelumnya, tambahkan seluruh bagian di bawah ini. Jika memang ada, tambahkan saja empat baris baru di dalam blok.

{
    "\UF729"  = "moveToBeginningOfLine:";
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";
}

Untuk mengaktifkan pengaturan ini, Anda harus keluar dari pengguna dan masuk lagi.

Perhatikan bahwa ini mencakup tindakan normal untuk memindahkan kursor dan Shift+ Home/ Endkombinasi untuk memilih pergerakan kursor yang berulang.

Caleb
sumber
12

Saya menggunakan OS X Sierra, dan ~/Library/KeyBindings/DefaultKeyBinding.dictsolusi yang disarankan oleh pengguna lain sebagian berfungsi: beberapa aplikasi seperti TextEdit sekarang memiliki perilaku yang diinginkan, tetapi aplikasi lain tidak. Google Chrome dan Slack adalah dua yang tampaknya tidak menghormati DefaultKeyBinding.dictfile tersebut.

Untuk memperbaiki aplikasi yang tersisa, saya menggunakan BetterTouchTool untuk membuat shortcut keyboard aplikasi-spesifik mengikat Homedan Enduntuk OS X pintas asli Ctrl+Adan Ctrl+E. BetterTouchTool tidak gratis, tetapi ada masa uji coba 45 hari.

Untuk melakukan ini:

  1. Instal dan luncurkan BetterTouchTool
  2. Buka tab Gestures> Keyboard
  3. Di bawah "Pilih Aplikasi", klik +dan pilih aplikasi yang ingin Anda perbaiki.
  4. Klik "Tambahkan Pintasan Baru", tetapkan Homekunci di bidang "rekam pintas", dan setel "Trigger pintasan keyboard lain" ke Ctrl + A. Ulangi untuk Enddan Ctrl + E.
  5. Setelah selesai panel akan terlihat seperti ini:Panel BetterTouchTool
  6. Di bawah Pengaturan Lanjut BetterTouchTool, biarkan berjalan pada saat startup.

Catatan: jangan keluar dari aplikasi BetterTouchTool atau itu akan berhenti mencegat penekanan tombol. Cukup tutup jendelanya dan itu harus terus bekerja di latar belakang.

Mamacdon
sumber
Terima kasih - hanya menggunakan ini di El Capitan karena saya sudah membayar untuk BetterTouchTool, dan berfungsi baik dengan Chrome, Slack dan aplikasi lainnya.
RichVel
9

Saya menggunakan KeyRemap4MacBook yang luar biasa dengan pengaturan khusus di bawah ini.

Ini memperbaiki Home / End di sebagian besar aplikasi dan tidak mengacaukan iTerm2.

Dari https://gist.github.com/lhotari/6134223181439b9ed0a1

<?xml version="1.0"?>
<!-- ~/Library/Application Support/KeyRemap4MacBook/private.xml -->
<!-- Custom keyboard mappings for MBP using https://pqrs.org/macosx/keyremap4macbook/ -->
<root>
    <item>
        <name>Lari's PC Style Home/End</name>
        <appendix>(Change Home to Command+Left)</appendix>
        <appendix>(Change End to Command+Right)</appendix>
        <appendix></appendix>
        <appendix>{{ PC_STYLE_BINDINGS_IGNORE_APPS_DESCRIPTION }}</appendix>
        <identifier>lari.remap.pclikehomeend</identifier>
        <block>
            <only>DREAMWEAVER</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME, ModifierFlag::SHIFT_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END,  ModifierFlag::SHIFT_L</autogen>
        </block>
        <block>
            <only>BLUEFISH,WORD,EXCEL,POWERPOINT</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END</autogen>
        </block>
        <!--
        <block>
            <only>EMACS, TERMINAL, X11, ECLIPSE</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::A, ModifierFlag::CONTROL_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::E, ModifierFlag::CONTROL_L</autogen>
        </block>
         -->
        <block>
            <not>{{ PC_STYLE_BINDINGS_IGNORE_APPS }}</not>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME,             KeyCode::CURSOR_LEFT,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,              KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
        </block>
    </item>
</root>
Lari Hotari
sumber
Belum diperbarui untuk bekerja dengan Sierra, per tautan di atas.
james.garriss
Alat ini telah diubah namanya menjadi Karabiner dan tampaknya berfungsi dengan OS X El Capitan 10.11, Sierra 10.12 dan High Sierra 10.13.
RichVel
7

Saya menemukan yang berikut bermanfaat untuk iterm2dan zshdengan kutipan dari sini :

Terbuka iTerm > Preference. Pergi ke profiles tab > Keys. Kemudian klik +tombol di bagian bawah daftar tombol, tekan Home(atau Fn+left arrowpada keyboard nirkabel apel), di bawah Actionpilih Send Escape Sequence, dan kemudian ketik[1~

Ulangi untuk Endkunci dengan [~4untuk urutan tombol keluar.

Jika Anda menggunakan zsh, lakukan juga ini:

1) Tempatkan yang berikut ini di ~/.zshrcfile Anda

bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line

2) Jalankan source ~/.zshrcdi terminal terbuka.

RationalDev
sumber
iTerm2 juga memiliki preset pemetaan kunci "Natural text editing" yang mencakup perilaku ini.
Matt M.
Perlu diubah menjadi bindkey "^[[~4" end-of-line. Perhatikan posisi 4.
Ty.
@Ty Terima kasih, tetapi bisakah Anda menjelaskan alasannya? Sumber asli, juga github.com/reenhanced/zsh-config/blob/master/lib/… dan github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… gunakan "^ [[4 4 ~ "
RationalDev
Saya tidak berpengalaman dalam urutan pelarian ini tetapi bagi saya ^[[4~menggema 4saat ^[[~4memindahkan kursor ke akhir baris.
Ty.
@Ty Menarik. Saya melakukan beberapa pencarian untuk mencari tahu mengapa, tetapi saya hanya dapat menemukan contoh ^[[4~. Jenis pengkodean keyboard dan karakter apa yang Anda gunakan, mungkin itu membuat perbedaan?
RationalDev
5

Saya menyelesaikan ini menggunakan Elemen Karabiner .

Anda perlu memperbarui bagian aturan ~/.config/karabiner/karabiner.jsondengan array JSON dari kode di bawah ini. Melakukannya memetakan kembali tombol home dan end untuk bekerja seperti cara mereka bekerja pada pc / windows.

{
  "rules": [
    {
      "description": "change home key to command + left_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "home"
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change home key to command + left_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "home",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "end"
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "end",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}

lihat juga: github gist

masukkan deskripsi gambar di sini

Jason Waters
sumber
1

@ Lri jawabannya luar biasa ( terima kasih banyak; ini membuat saya gila ), tapi akhirnya saya sedikit memodifikasinya.

(Dalam jawaban ini, saya menggunakan nama-nama non-appley untuk kunci, jadi command = super dan option = alt.)

Super-kiri dan super-kanan dulu benar-benar dipetakan ke moveToLeftEndOfLinedan moveToRightEndOfLine. Menggunakan moveToBeginningOfLinedan moveToEndOfLine, seperti halnya @Lri, dapat menyebabkan perilaku yang tidak konsisten.

Ada banyak perbedaan lain antara pintasan appley dan pintasan orang lain yang saya tambahkan. Misalnya, ctrl-kiri dan ctrl-kanan seharusnya bergerak di antara kata-kata; bukan alt-kiri dan alt-kanan. Saya tidak berpikir ini lengkap, tetapi bekerja dengan cukup baik untuk saya saat ini. Saya berasumsi pengguna telah menukar kontrol dan kunci super untuk memperbaiki pemotongan, menyalin, dan menempel.

~/Library/KeyBindings/DefaultKeyBinding.dict:
{
    "\UF729"   = moveToLeftEndOfLine:; // home
    "\UF72B"   = moveToRightEndOfLine:; // end
    "$\UF729"  = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B"  = moveToEndOfLineAndModifySelection:; // shift-end

    "@\UF700"  = moveUp:;  //super-up
    "@\UF701"  = moveDown:;  //super-down
    "@\UF702"  = moveWordLeft:;  //super-left
    "@\UF703"  = moveWordRight:;  //super-right

    "@$\UF700" = moveUpAndModifySelection:;  // super-shift-up
    "@$\UF701" = moveDownAndModifySelection:;  // super-shift-down
    "@$\UF702" = moveWordLeftAndModifySelection:;  // super-shift-left
    "@$\UF703" = moveWordRightAndModifySelection:;  // super-shift-right

    "@\UF728"  = deleteWordForward:;  // super-delete
    "@\U7F"    = deleteWordBackward:;  // super-backspace
}
Eric Toombs
sumber
-3

Anda juga dapat memetakan kembali tombol keyboard, serta menyesuaikan mouse dan trackpad Anda dengan segala macam cara keren, dengan BetterTouchTool gratis, tersedia di http://blog.boastr.net/ . Solusi sempurna untuk menyesuaikan cara kerja perangkat input Anda!

Gary Coker
sumber
2
Bisakah Anda memperluas jawaban Anda dengan instruksi tentang cara menggunakan perangkat lunak yang ditentukan untuk menyelesaikan masalah aslinya?
grg
Tidak gratis dalam arti "Bir Gratis" atau "Kebebasan". Uji coba 45 hari, sumber tertutup, perangkat lunak berbayar.
Wyatt8740