Remap ăn tại nhà và giữa cuối đời và đầu cuối dòng


326

Hầu hết thời gian tính toán của tôi dành cho Linux (với thời gian thỉnh thoảng trong Windows). Trên các nền tảng này Home, Endcác phím và phổ biến nhảy đến đầu hoặc cuối của dòng hiện tại.

Tôi dần dần quen với việc sử dụng một máy tính Apple trong cuộc sống của mình, nhưng nó vẫn còn bực bội hơn những phím này dường như bị ràng buộc ở phần đầu và phần cuối của tài liệu và dường như không có phím nào cả cho dòng hành động dựa trên.

Câu hỏi của tôi:

  1. Có các keybindings hiện tại tôi bị thiếu cho đầu và cuối dòng không? (Tôi chủ yếu sử dụng Terminal, Chrome và LibreOffice)
  2. Có cách nào để sắp xếp lại các chức năng của các phím này thành các chức năng mà tôi quen thuộc không? Tôi sẵn sàng từ bỏ các phiên bản dựa trên tài liệu mà dường như ít sử dụng với tôi.

Ngoài ra hai hãy cẩn thận:

  1. Tôi không phải là người dùng duy nhất trên hệ thống. Sẽ thật tuyệt nếu cài đặt người dùng của tôi không phá vỡ trải nghiệm của người khác. Nếu điều này là không thể, tôi nghĩ có lẽ tôi có sở thích mạnh nhất!
  2. Tôi sử dụng nhiều ngôn ngữ và chuyển đổi giữa các bố trí bàn phím, vì vậy mọi giải pháp sẽ được mong đợi hoạt động ngay cả khi chuyển đổi giữa nhiều bố trí bàn phím.

1
Lưu ý rằng trong khi tôi kết thúc việc tìm giải pháp và trả lời câu hỏi của riêng mình, tôi mở cho các giải pháp dễ dàng hơn hoặc linh hoạt hơn. Ngoài ra quá trình khám phá điều này là không rõ ràng. Ví dụ: bạn tìm mã khóa và tên hành động ở đâu nếu tôi muốn sắp xếp lại nhiều khóa hơn? Hãy thêm câu trả lời nếu bạn có kiến ​​thức liên quan!
Caleb

Câu trả lời:


304

Các phím tắt mặc định để di chuyển đến đầu hoặc cuối dòng (được bao bọc) là . hoặc AEdi chuyển đến đầu hoặc cuối của các dòng không có dấu (hoặc đoạn). di chuyển lùi / tiến bằng lời nói, và tất cả những điều này tương thích với việc giữ Shiftđể chọn trong khi di chuyển tương ứng.

Bạn có thể sắp xếp lại nhà và kết thúc bằng cách tạo ~/Library/KeyBindings/và lưu danh sách tài sản như thế này như DefaultKeyBinding.dict:

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

Hầu hết các phím bấm để chỉnh sửa văn bản trong OS X được xác định trong /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

Áp dụng các thay đổi đòi hỏi phải mở lại các ứng dụng. DefaultKeyBinding.dict bị bỏ qua bởi một số phiên bản Xcode cũ (hoạt động với phiên bản mới nhất 6.3.1), Terminal và nhiều ứng dụng đa nền tảng.

Xem Hệ thống văn bản ca caotrang web của tôi để biết thêm thông tin về các phím bấm tùy chỉnh.

Có thể tùy chỉnh các phím bấm của thiết bị đầu cuối trong Tùy chọn> Cài đặt> Bàn phím. \033OHdi chuyển đến đầu của một dòng và \033OFđến cuối của một dòng.

Trong Eclipse, các ràng buộc khóa phải được sửa đổi trong Tùy chọn> Chung> Khóa. Bạn cần sửa đổi các ràng buộc mặc định cho các lệnh Line StartLine End (thay thế ⌘ ← bằng ↖ và ⌘ → bằng). Để lựa chọn hoạt động, cũng sửa đổi Chọn Bắt đầu dòngChọn Kết thúc dòng .

PS: Bạn có thể cần phải đăng xuất và đăng nhập lại để ~/Library/KeyBindings/DefaultKeyBinding.dictthay đổi có hiệu lực.


1
Thông tin hữu ích về ánh xạ chính - Tôi đã sử dụng chúng với BetterTouchTool (thương mại), xem câu trả lời này .
RichVel

3
Điều này không hoạt động trong hầu hết các ứng dụng theo kinh nghiệm của tôi. Nó là tốt hơn để sử dụng Karabina-Elements.
Timmmm

3
Điều này thật tuyệt vì nó hoạt động trong Terminal, iTerm2, Chrome, Sublime & Outlook. Giải pháp thay thế (Karabina) kém hơn vì ánh xạ "Home" thành Command + LeftArrow, thực sự chuyển các cửa sổ trong Terminal. Bạn phải nhớ khởi động lại tất cả các ứng dụng sau khi lưu tệp .dict.
Will Sheppard

1
Điều này không hoạt động với vim
MohitC

2
Cài đặt này hoạt động với tôi trên Mac OS Mojave với bàn phím ngoài được kết nối.
jdhao

106

Tôi hiện đang sử dụng Lion 10.7.4 và vì một số lý do kỳ lạ, việc chỉnh sửa ~/Library/KeyBindings/DefaultKeyBinding.dictkhông hoạt động đối với tôi.

Tôi đã thấy rằng addon KeyRemap4MacBook System Preferences (hiện được gọi là Karabiner ) hoạt động rất tốt và bạn cũng có thể ánh xạ lại nhiều loại khóa với nó mà không phải chỉnh sửa bất kỳ tệp văn bản nào. Ví dụ: thay đổi phím lên / xuống trang để con trỏ cũng theo sau trên trang lên / xuống.

Chỉ cần tải xuống addon và trong bảng Tùy chọn hệ thống, duyệt đến For PC Usersphần và kiểm tra Use PC Style Home /End.

Lưu ý, tôi đã chọn (Change Home to Command+Left)thay vì (Change Home to Control+A), như thể tôi đã chọn đầu tiên và nếu dòng được bọc, nhà sẽ đưa tôi đến đầu dòng được bọc, một vài dòng ở trên, thay vì đưa tôi đến đầu dòng hiện tại.

KeyRemap4MacBook


9
Karabiner là nguồn mở
Jedidja

2
Với 10.10.5, các đề xuất khác dường như không hoạt động, nhưng Karabiner (tên mới của KeyRemap4MacBook - hoạt động trên tất cả các sản phẩm Mac) hoạt động tốt và không cần khởi động lại để các thay đổi có hiệu lực. Vô cùng hữu ích cho Mac noob này; Hy vọng những người khác cũng có thể có lợi.
Ralph J

1
Cho đến hôm nay, "Karabiner không hoạt động trên macOS Sierra vào lúc này."
james.garriss

2
@ james.garriss Cho Karabiner-Elements một đi - cùng tác giả mặc dù được viết lại từ mặt đất lên để hỗ trợ Sierra (nó vẫn còn trong phát triển vì vậy họ đang khá một vài gờ nhám) - github.com/tekezo/Karabiner-Elements
jklp

5
@jklp Thật không may, chức năng cần thiết để ánh xạ lại phím Home và End trên bàn phím mở rộng của Apple chưa có sẵn trong Karabiner Elements. Cá nhân tôi dường như có bộ nhớ cơ cho Ctrl-a, Ctrl-e khi làm việc trong bảng điều khiển, nhưng khi làm việc trong một ứng dụng GUI như Sublime, điều đó thật khó nhớ. Đối với Sublime (cụ thể), có một giải pháp, tuy nhiên: coderwall.com/p/upolqw/ Khăn
Ville

43

Nhờ bài viết này , tôi đã tìm ra cách liên kết lại các phím HomeEndkhóa với các hành động dựa trên dòng trên cơ sở mỗi người dùng hoạt động trên các bố cục bàn phím.

Bạn cần tạo một tệp từ điển với mã phím và các lệnh mới để ánh xạ tới, nhưng trước tiên hãy đảm bảo thư mục nơi này sẽ được đặt bằng cách mở Terminal và chạy:

$ mkdir -p ~/Library/KeyBindings

Sau đó tạo hoặc chỉnh sửa tập tin tại ~/Library/KeyBindings/DefaultKeyBinding.dict. Nếu nó không tồn tại trước đó, hãy thêm toàn bộ phần bên dưới. Nếu nó tồn tại, chỉ cần thêm bốn hàng mới bên trong khối.

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

Để kích hoạt cài đặt, bạn sẽ cần phải đăng xuất khỏi người dùng của mình và đăng nhập lại.

Lưu ý rằng điều này bao gồm cả hành động bình thường của việc di chuyển con trỏ và kết hợp Shift+ Home/ Endđể chọn chuyển động con trỏ.


12

Tôi đang sử dụng OS X Sierra và ~/Library/KeyBindings/DefaultKeyBinding.dictgiải pháp được đề xuất bởi những người dùng khác đã hoạt động một phần: một số ứng dụng như TextEdit hiện có hành vi mong muốn, nhưng các ứng dụng khác thì không. Google Chrome và Slack là hai thứ dường như không tôn trọng DefaultKeyBinding.dicttệp.

Để khắc phục các ứng dụng còn lại, tôi sử dụng BetterTouchTool để tạo ra các phím tắt ứng dụng cụ thể ràng buộc HomeEndcác phím tắt có nguồn gốc OS X Ctrl+ACtrl+E. BetterTouchTool không miễn phí, nhưng có thời gian dùng thử 45 ngày.

Để làm điều này:

  1. Cài đặt và khởi chạy BetterTouchTool
  2. Chuyển đến tab Cử chỉ> Bàn phím
  3. Trong "Chọn ứng dụng", nhấp +và chọn ứng dụng bạn muốn sửa.
  4. Nhấp vào "Thêm phím tắt mới", gán Homephím trong trường "phím tắt ghi" và đặt "Kích hoạt phím tắt bàn phím khác" thành Ctrl + A. Lặp lại cho Endvà Ctrl + E.
  5. Khi bạn hoàn thành bảng điều khiển sẽ trông như thế này:Bảng điều khiển BetterTouchTool
  6. Trong Cài đặt nâng cao của BetterTouchTool, cho phép nó chạy khi khởi động.

Lưu ý: không thoát khỏi ứng dụng BetterTouchTool nếu không ứng dụng sẽ dừng việc bấm phím. Chỉ cần đóng cửa sổ của nó và nó sẽ tiếp tục làm việc trong nền.


Cảm ơn - chỉ sử dụng điều này trên El Capitan vì tôi đã trả tiền cho BetterTouchTool và nó hoạt động tốt với Chrome, Slack và các ứng dụng khác.
RichVel

9

Tôi đang sử dụng KeyRemap4MacBook tuyệt vời với các cài đặt tùy chỉnh bên dưới.

Nó sửa lỗi Home / End trong hầu hết các ứng dụng và không làm hỏng iTerm2.

Từ 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>

Chưa được cập nhật để làm việc với Sierra, theo liên kết ở trên.
james.garriss

Công cụ này đã được đổi tên thành Karabiner và rõ ràng hoạt động với OS X El Capitan 10.11, Sierra 10.12 và High Sierra 10.13.
RichVel

7

Tôi tìm thấy những điều hữu ích sau đây iterm2zshvới các trích dẫn từ đây :

Mở iTerm > Preference. Tới profiles tab > Keys. Sau đó bấm vào +nút ở dưới cùng của danh sách phím, nhấn Home(hoặc Fn+left arrowtrên bàn phím không dây táo), bên dưới Actionchọn Send Escape Sequence, sau đó nhập[1~

Lặp lại cho Endkhóa với [~4trình tự phím thoát.

Nếu bạn đang sử dụng zsh, cũng làm điều này:

1) Đặt các mục sau trong ~/.zshrctệp của bạn

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

2) Chạy source ~/.zshrctrong bất kỳ thiết bị đầu cuối mở.


iTerm2 cũng có cài đặt ánh xạ khóa "Chỉnh sửa văn bản tự nhiên" bao gồm hành vi này.
Matt M.

Cần phải đổi thành bindkey "^[[~4" end-of-line. Lưu ý vị trí của 4.
Ty.

@Ty Cảm ơn, nhưng bạn có thể giải thích tại sao không? Nguồn gốc, cũng như github.com/reenhanced/zsh-config/blob/master/lib/...github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/... sử dụng "^ [[4 ~ "
RationalDev

Tôi không rành về các chuỗi thoát này nhưng đối với tôi ^[[4~vang vọng 4trong khi ^[[~4di chuyển con trỏ đến cuối dòng.
Ty.

@Ty Thú vị. Tôi đã thực hiện một số tìm kiếm để tìm hiểu tại sao, nhưng tôi chỉ có thể tìm thấy các ví dụ về ^[[4~. Bạn đang sử dụng loại bàn phím và mã hóa ký tự nào, có thể điều đó tạo ra sự khác biệt?
RationalDev


5

Tôi đã hoàn thành việc này bằng Karabiner Elements .

Bạn cần cập nhật phần quy tắc ~/.config/karabiner/karabiner.jsonvới mảng JSON từ mã bên dưới. Làm như vậy để ánh xạ lại phím home và end để hoạt động theo cách chúng hoạt động trên 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"
        }
      ]
    }
  ]
}

xem thêm: ý chính

nhập mô tả hình ảnh ở đây


1

Câu trả lời của @ Lri thật tuyệt vời ( cảm ơn bạn rất nhiều; điều này đã khiến tôi phát điên ), nhưng cuối cùng tôi đã sửa đổi nó một chút.

(Trong câu trả lời này, tôi sử dụng tên không phải appley cho các phím, vì vậy lệnh = super và tùy chọn = alt.)

Siêu trái và siêu phải được sử dụng để thực sự được ánh xạ tới moveToLeftEndOfLinemoveToRightEndOfLine. Sử dụng moveToBeginningOfLinemoveToEndOfLine, giống như @Lri, có thể gây ra hành vi không nhất quán.

Có một loạt các khác biệt khác giữa các phím tắt appley và các phím tắt của mọi người khác mà tôi đã thêm. Ví dụ, ctrl-left và ctrl-right được cho là di chuyển giữa các từ; không phải alt-trái và alt-phải. Tôi không nghĩ rằng điều này là đầy đủ, nhưng nó hoạt động khá tốt với tôi ngay bây giờ. Tôi giả sử người dùng đã hoán đổi điều khiển và siêu phím để sửa lỗi cắt, sao chép và dán.

~/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
}

-3

Bạn cũng có thể sắp xếp lại các phím bàn phím, cũng như tùy chỉnh chuột và bàn di chuột của mình theo tất cả các cách thú vị, với BetterTouchTool miễn phí, có sẵn tại http://blog.boastr.net/ . Một giải pháp tuyệt vời để tùy chỉnh hoạt động của các thiết bị đầu vào của bạn!


2
Bạn có thể mở rộng câu trả lời của mình với hướng dẫn về cách sử dụng phần mềm được chỉ định để giải quyết vấn đề ban đầu không?
grg

Không miễn phí theo cảm giác "Bia miễn phí" hay "Tự do". Dùng thử 45 ngày, nguồn đóng, phần mềm trả phí.
Wyatt8740
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.