干掉 MAC 系统的 ctrl + click = right click(包括支持 idea 下 ctrl+click 跳转定义处功能)

2020-11-22 22:55:29 +08:00
 perfee

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 实现它。

1846 次点击
所在节点    macOS
4 条回复
kingfalse
2020-11-23 08:53:20 +08:00
建议别折腾了,直接装 windows
perfee
2020-11-25 22:23:42 +08:00
@kingfalse 公司电脑,安全组的人天天监控着,动不得啊。

已经折腾完毕了,基本上所有操作都保持和 windows 上一致了。
全局替换了 ctrl+c,a,z,v,x -> cmd+c,a,z,v,x
idea 所有快捷键和 win 完全一致
alt+tab 已找到替代软件
连 iterm2 上的右键复制,右键粘贴都让我给写脚本实现了,目前保持和 windows terminal 完全一致。
叉会儿腰。
perfee
2020-11-25 22:37:50 +08:00
我认为基本上 mac 上所有的快捷键问题都可以用 karabiner 搞定,就是有的需要自己写一点脚本,官网文档很全,都有 demo 。
另外 iterm2 真是个神器,写代码可以定制超多功能,基本上可以做到随心所欲了。
最重要的是这两个东西都是免费的。
perfee
2020-11-25 22:39:50 +08:00
上边 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)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX