【问题标题】:Sublime Text - How to get OSX keyboard shortcut on linux or windowsSublime Text - 如何在 Linux 或 Windows 上获取 OSX 键盘快捷键
【发布时间】:2015-08-10 00:15:49
【问题描述】:

在 OSX 上的 Sublime Text 3 中,我可以使用键盘快捷键“command+left/right arrow”跳转到行的开头/结尾,以及“command+shift+left/right arrow”从我所在的点到行的开头/结尾进行选择。

有没有办法在linux或windows上分别以“ctrl+左/右箭头”和“ctrl+shift+左/右箭头”的形式获得相同的快捷方式?

【问题讨论】:

    标签: linux windows macos sublimetext3


    【解决方案1】:

    built-in OS X shortcuts,不是 Sublime 的一部分。但是,您可以在 Windows 或 Linux 上通过覆盖 Ctrl/Ctrl的默认行为来模仿这种行为>Shift/ 使用自定义键盘映射。

    默认情况下,使用 Ctrl/ 分别按单词前后移动光标,同时按住 Shift 允许选择。如果要更改此设置,请打开 Preferences -> Key Bindings-User 并添加以下内容:

    {
        "keys": ["ctrl+right"],
        "command": "move_to", "args": {"to": "eol", "extend": false}
    },
    {
        "keys": ["ctrl+left"],
        "command": "move_to", "args": {"to": "bol", "extend": false}
    },
    {
        "keys": ["ctrl+shift+right"],
        "command": "move_to", "args": {"to": "eol", "extend": true}
    },
    {
        "keys": ["ctrl+shift+left"],
        "command": "move_to", "args": {"to": "bol", "extend": true}
    }
    

    如果文件在您打开时为空,请确保将所有内容都用左方括号和右方括号 [ ] 括起来。保存文件(它会自动保存在正确的位置,即Packages下的User目录,选择Preferences -> Browse Packages...时打开的目录),您的新快捷方式应该可以正常工作.请注意,当您处理缩进文本时,使用 Ctrl 移动到行首会将您移动到 ​​text 在那条线上,而不是在这条线上的第一个位置。如果您想这样做,请再次按 Ctrl,或将上述键定义中的 bol 更改为 hardbol

    【讨论】:

    • 感谢您的全面回答!
    【解决方案2】:

    Kinto 是我最近创建的东西,它不仅将键盘重新映射为更像 mac 一样,它会根据终端使用的需要更改键盘映射,并提供自定义键盘映射来处理系统范围内的 Cmd + 箭头键。您不再需要在 sublime 文本中指定自定义键绑定。

    最初 Kinto 不处理 Cmd + 箭头键,但这确实是有人向我提出的第一个问题,所以我通过创建原生 xkb 键盘映射来添加它。

    https://github.com/rbreaves/kinto

    更新

    Kinto 现在使用xkeysnail 来简化重新映射过程。

    这是新配置文件的示例,但完整的重映射是 Kinto 的一部分,需要来自 github 的最新 xkeysnail,而不是 repos。

    # -*- coding: utf-8 -*-
    
    import re
    from xkeysnail.transform import *
    
    terminals = ["gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty"]
    terminals = [term.casefold() for term in terminals]
    termStr = "|".join(str(x) for x in terminals)
    
    # [Conditional modmap] Change modifier keys in certain applications
    define_conditional_modmap(lambda wm_class: wm_class.casefold() not in terminals,{
        # Default Mac/Win
        Key.LEFT_ALT: Key.RIGHT_CTRL,   # WinMac
        Key.LEFT_META: Key.LEFT_ALT,    # WinMac
        Key.LEFT_CTRL: Key.LEFT_META,   # WinMac
        Key.RIGHT_ALT: Key.RIGHT_CTRL,  # WinMac
        Key.RIGHT_META: Key.RIGHT_ALT,  # WinMac
        Key.RIGHT_CTRL: Key.RIGHT_META, # WinMac
    })
    
    # [Conditional modmap] Change modifier keys in certain applications
    define_conditional_modmap(re.compile(termStr, re.IGNORECASE), {
        # Default Mac/Win
        Key.LEFT_ALT: Key.RIGHT_CTRL,   # WinMac
        Key.LEFT_META: Key.LEFT_ALT,    # WinMac
        Key.LEFT_CTRL: Key.LEFT_CTRL,   # WinMac
        Key.RIGHT_ALT: Key.RIGHT_CTRL,  # WinMac
        Key.RIGHT_META: Key.RIGHT_ALT,  # WinMac
        Key.RIGHT_CTRL: Key.LEFT_CTRL,  # WinMac
    })
    
    define_keymap(None,{
        # Cmd Tab - App Switching Default
        K("RC-Tab"): K("RC-F13"),                     # Default
        K("RC-Shift-Tab"): K("RC-Shift-F13"),         # Default
        K("RC-Grave"): K("RC-Shift-F13"),             # Default
        # K("RC-Tab"): K("RC-backslash"),               # Chromebook
        # K("RC-Shift-Tab"): K("RC-Shift-backslash"),   # Chromebook
        # K("RC-Grave"): K("RC-Shift-backslash"),       # Chromebook
        # In-App Tab switching
        # K("M-Tab"): K("C-Tab"),                       # Chromebook - In-App Tab switching
        # K("M-Shift-Tab"): K("C-Shift-Tab"),           # Chromebook - In-App Tab switching
        # K("M-Grave") : K("C-Shift-Tab"),              # Chromebook - In-App Tab switching
        K("Super-Tab"): K("LC-Tab"),                  # Default
        K("Super-Shift-Tab"): K("LC-Shift-Tab"),      # Default
        K("LC-Grave") : K("LC-Shift-Tab"),            # Default
    
        # Wordwise
        K("RC-Left"): K("Home"),                      # Beginning of Line
        K("RC-Shift-Left"): K("Shift-Home"),          # Select all to Beginning of Line
        K("RC-Right"): K("End"),                      # End of Line
        K("RC-Shift-Right"): K("Shift-End"),          # Select all to End of Line
        # K("RC-Left"): K("C-LEFT_BRACE"),              # Firefox-nw - Back
        # K("RC-Right"): K("C-RIGHT_BRACE"),            # Firefox-nw - Forward
        # K("RC-Left"): K("M-LEFT"),                    # Chrome-nw - Back
        # K("RC-Right"): K("M-RIGHT"),                  # Chrome-nw - Forward
        K("RC-Up"): K("C-Home"),                      # Beginning of File
        K("RC-Shift-Up"): K("C-Shift-Home"),          # Select all to Beginning of File
        K("RC-Down"): K("C-End"),                     # End of File
        K("RC-Shift-Down"): K("C-Shift-End"),         # Select all to End of File
        K("M-Backspace"): K("Delete"),                # Delete
        # K(""): pass_through_key,                      # cancel
        # K(""): K(""),                                 #
    })
    
    define_keymap(lambda wm_class: wm_class.casefold() not in ("code"),{
        # Wordwise remaining - for Everything but VS Code
        K("M-Left"): K("C-Left"),               # Left of Word
        K("M-Shift-Left"): K("C-Shift-Left"),   # Select Left of Word
        K("M-Right"): K("C-Right"),             # Right of Word
        K("M-Shift-Right"): K("C-Shift-Right"), # Select Right of Word
        # ** VS Code fix **
        #   Electron issue precludes normal keybinding fix.
        #   Alt menu auto-focus/toggle gets in the way.
        #
        #   refer to ./xkeysnail-config/vscode_keybindings.json
        # **
        #
        # ** Firefox fix **
        #   User will need to set "ui.key.menuAccessKeyFocuses"
        #   under about:config to false.
        #
        #   https://superuser.com/questions/770301/pentadactyl-how-to-disable-menu-bar-toggle-by-alt
        # **
        #
    })
    
    define_keymap(re.compile(termStr, re.IGNORECASE),{
        # Ctrl Tab - In App Tab Switching
        K("LC-Tab") : K("LC-PAGE_DOWN"),
        K("LC-Shift-Tab") : K("LC-PAGE_UP"),
        K("LC-Grave") : K("LC-PAGE_UP"),
        # Converts Cmd to use Ctrl-Shift
        K("RC-Tab"): K("RC-F13"),
        K("RC-Shift-Tab"): K("RC-Shift-F13"),
        K("RC-V"): K("C-Shift-V"),
        K("RC-MINUS"): K("C-Shift-MINUS"),
        K("RC-EQUAL"): K("C-Shift-EQUAL"),
        K("RC-BACKSPACE"): K("C-Shift-BACKSPACE"),
        K("RC-Q"): K("C-Shift-Q"),
        K("RC-W"): K("C-Shift-W"),
        K("RC-E"): K("C-Shift-E"),
        K("RC-R"): K("C-Shift-R"),
        K("RC-T"): K("C-Shift-t"),
        K("RC-Y"): K("C-Shift-Y"),
        K("RC-U"): K("C-Shift-U"),
        K("RC-I"): K("C-Shift-I"),
        K("RC-O"): K("C-Shift-O"),
        K("RC-P"): K("C-Shift-P"),
        K("RC-LEFT_BRACE"): K("C-Shift-LEFT_BRACE"),
        K("RC-RIGHT_BRACE"): K("C-Shift-RIGHT_BRACE"),
        K("RC-A"): K("C-Shift-A"),
        K("RC-S"): K("C-Shift-S"),
        K("RC-D"): K("C-Shift-D"),
        K("RC-F"): K("C-Shift-F"),
        K("RC-G"): K("C-Shift-G"),
        K("RC-H"): K("C-Shift-H"),
        K("RC-J"): K("C-Shift-J"),
        K("RC-K"): K("C-Shift-K"),
        K("RC-L"): K("C-Shift-L"),
        K("RC-SEMICOLON"): K("C-Shift-SEMICOLON"),
        K("RC-APOSTROPHE"): K("C-Shift-APOSTROPHE"),
        K("RC-GRAVE"): K("C-Shift-GRAVE"),
        K("RC-BACKSLASH"): K("C-Shift-BACKSLASH"),
        K("RC-Z"): K("C-Shift-Z"),
        K("RC-X"): K("C-Shift-X"),
        K("RC-C"): K("C-Shift-C"),
        K("RC-V"): K("C-Shift-V"),
        K("RC-B"): K("C-Shift-B"),
        K("RC-N"): K("C-Shift-N"),
        K("RC-M"): K("C-Shift-M"),
        K("RC-COMMA"): K("C-Shift-COMMA"),
        K("RC-DOT"): K("C-Shift-DOT"),
        K("RC-SLASH"): K("C-Shift-SLASH"),
        K("RC-KPASTERISK"): K("C-Shift-KPASTERISK"),
    }, "terminals")
    

    https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

    这里还有一个要点,如果您只是想看看这一切的核心,它不会在需要时更改您的键盘映射。 Gist 也不包括自定义 xkb 键盘映射文件,这些文件设置 macOS 样式光标/使用 Cmd 和箭头键的逐字操作。

    https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2014-11-23
      • 2019-08-06
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多