MAC:“用户你好,我是你爹”。 “如果你不用 mac 鼠标,那最好不要用外设鼠标了,因为我规定 ctrl+click = right click” 。。。。
我是个软粉,酷爱 windows 。所以日常常用快捷键都是 win 风格,尤其是 IDE 中,ctrl + click 调转到代码定义处,早形成了肌肉记忆。你让我改?改是不可能改的。
无奈公司发 mac 电脑,看着同事都用 mac,我把 mac 扔一边吃灰,继续用着我的 surface 写代码。过了一年多,我觉得每天上下班拿电脑有些累,那能不能用着 mac,还使用着 win 风格的快捷键?我开始尝试了。 平时常用的 ctrl+c,v,a,z,s 等等,这些都好办,搞一个全局的映射就好了嘛(这里推荐免费神器 Karabiner: https://github.com/pqrs-org/Karabiner-Elements )。 另外 cmd,alt,fn,ctrl 键盘位置互换,mac 也提供的有这个功能。用外设的时候可以根据外部键盘互换一下。
MAC 上的 ctrl + click = right click 这个设定十分恶心,我是无论如何也不接受这个设定的。 上 Karabiner 代码,把 ctrl + click 改成 ${ 当前是 idea 吗 ? (ctrl + B) : click}. 这个代码既全局屏蔽了 ctrl + click = right click 的设定,也能在 idea 上正常工作,让其实现跳转到定义处功能。 //代码明天上班后贴上来。
另外我还想到了在 mac 神器 iterm2 上,实现右键复制,右键粘贴的功能,就像 windows terminal 上行为一样吗,明天开始写 script 实现它。
附上 karabiner 修改 idea ctrl+click (ctrl+alt+click 的未实现,不过如出一辙,把代码改下就可以实现 ctrl+alter+click 避免出现右键菜单的功能)代码:
{
"title": "Ctrl Click On Idea",
"rules": [
{
"description": "Ctrl Click On Idea",
"manipulators": [
{
"type": "basic",
"from": {
"pointing_button": "button1",
"modifiers": {
"mandatory": [
"left_control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"pointing_button": "button1"
}
],
"to_delayed_action": {
"to_if_invoked": [
{
"key_code": "b",
"modifiers": [
"left_control"
]
}
]
},
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.jetbrains\\.intellij"
]
}
],
"parameters": {
"basic.to_delayed_action_delay_milliseconds": 10
}
}
]
},
{
"description": "Disabled Ctrl + Left",
"manipulators": [
{
"type": "basic",
"from": {
"pointing_button": "button1",
"modifiers": {
"mandatory": [
"left_control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"pointing_button": "button1"
}
]
}
]
}
]
}
导入到 karabiner 中即可。
上边 iterm2 的 python 代码缩进坏了,因为我发布的时候忘记选择 markdown 了。这里补一下吧,万一真有人要用呢,也算是个小小的分享了。
#!/usr/bin/env python3.7
import iterm2
async def main(connection):
app = await iterm2.async_get_app(connection)
@iterm2.RPC
async def smartCopyAndPaste():
window = app.current_terminal_window
if (window is None): return
tab = window.current_tab
if (tab is None): return
session = tab.current_session
if (session is None): return
selection = await session.async_get_selection()
text = await session.async_get_selection_text(selection)
if ((text is None) or (len(text) == 0)):
await iterm2.MainMenu.async_select_menu_item(connection, "Paste")
return
await iterm2.MainMenu.async_select_menu_item(connection, "Copy")
await session.async_set_selection(iterm2.Selection([]))
# Remember to call async_register!
await smartCopyAndPaste.async_register(connection)
iterm2.run_forever(main)
1
kingfalse 2020-11-23 08:53:20 +08:00 via Android 4
建议别折腾了,直接装 windows
|
2
perfee OP @kingfalse 公司电脑,安全组的人天天监控着,动不得啊。
已经折腾完毕了,基本上所有操作都保持和 windows 上一致了。 全局替换了 ctrl+c,a,z,v,x -> cmd+c,a,z,v,x idea 所有快捷键和 win 完全一致 alt+tab 已找到替代软件 连 iterm2 上的右键复制,右键粘贴都让我给写脚本实现了,目前保持和 windows terminal 完全一致。 叉会儿腰。 |
3
perfee OP 我认为基本上 mac 上所有的快捷键问题都可以用 karabiner 搞定,就是有的需要自己写一点脚本,官网文档很全,都有 demo 。
另外 iterm2 真是个神器,写代码可以定制超多功能,基本上可以做到随心所欲了。 最重要的是这两个东西都是免费的。 |
4
perfee OP 上边 iterm2 的 python 代码缩进坏了,因为我发布的时候忘记选择 markdown 了。这里补一下吧,万一真有人要用呢,也算是个小小的分享了。
#!/usr/bin/env python3.7 import iterm2 async def main(connection): app = await iterm2.async_get_app(connection) @iterm2.RPC async def smartCopyAndPaste(): window = app.current_terminal_window if (window is None): return tab = window.current_tab if (tab is None): return session = tab.current_session if (session is None): return selection = await session.async_get_selection() text = await session.async_get_selection_text(selection) if ((text is None) or (len(text) == 0)): await iterm2.MainMenu.async_select_menu_item(connection, "Paste") return await iterm2.MainMenu.async_select_menu_item(connection, "Copy") await session.async_set_selection(iterm2.Selection([])) # Remember to call async_register! await smartCopyAndPaste.async_register(connection) iterm2.run_forever(main) |