1. Windows 之 AutoHotKey

初次了解AutoHotKey,是在Win 下最爱效率神器:AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不再赘余。当时打字很慢,更苦于写代码时需要经常按方向键、HomeEnd以及删除键等等按键(当然这些问题有些编辑器就可以解决),还经常涉及到文本选择,对个人而言很是痛苦,直到遇到了AutoHotKey,解决了一大痛点,可以用它来重新布局我的键盘。看到了@冯若航大佬分享的AHK脚本AutoHotKey 常用函数或小技巧有哪些分享?,我稍微做了一丁点修改及删减,主要的按键映射如下图所示(全部是关于和CapsLock按键的组合应用,完整功能见代码):

这里稍微说明一下:将CapsLock键映射为了ESC键,CapsLock键通过CapsLock + \来实现,图中的实现默认为和CapsLock组合按下时生效(如CapsLock + T插入当前的日期和时间,CapsLock + D复制当前行等等);另外,关于光标移动,比如CapsLock + H映射为Home键,若再同时按下Alt键,则可实现选中当前光标到Home键位置之间的文本,其余的比如CapsLock + Alt + U实现向前选中一个字词皆类似,依此类推详见上图(另外,还可按住CapsLock + Alt不松手,多次按下不同的光标移动映射按键,以此来实现快速精确的选中任何文本)。

这里也把代码分享一下,我的CapsLock.ahk脚本如下所示:

;---- CapsLock Initializer ----
SetCapsLockState, AlwaysOff ;---- CapsLock + \ === CapsLock ----
CapsLock & \::
GetKeyState, CapsLockState, CapsLock, T
if CapsLockState = D
SetCapsLockState, AlwaysOff
else
SetCapsLockState, AlwaysOn
KeyWait, \
return ;---- CapsLock === ESC ----
CapsLock::Send, {ESC} ;---- Editor ----
CapsLock & z:: Send, ^z ; Z = Cancel
CapsLock & x:: Send, ^x ; X = Cut
CapsLock & c:: Send, ^c ; C = Copy
CapsLock & v:: Send, ^v ; V = Paste
CapsLock & a:: Send, ^a ; A = Select All
CapsLock & g:: Send, ^y ; Y = Redo
;---- Delete ----
CapsLock & ,:: Send, {Del} ; , = Del char after
CapsLock & .:: Send, ^{Del} ; . = Del word after
CapsLock & /:: Send, +{End}{Del} ; / = Del all after
CapsLock & m:: Send, {BS} ; m = Del char before
CapsLock & n:: Send, ^{BS} ; n = Del word before
CapsLock & b:: Send, +{Home}{Del} ; b = Del all before
;---- ---- ---- ----
CapsLock & f:: Send, ^f ; F = Find
CapsLock & w:: Send, ^w ; W = Close
CapsLock & s:: Send, ^s ; S = Save
CapsLock & e:: Send, !{F4} ; E = Exit
;---- ---- ---- ----
CapsLock & q:: Send, {Enter}
CapsLock & r:: Send, {AppsKey}
;---- ---- ---- ----
CapsLock & =:: Send, ^{WheelUp}
CapsLock & -:: Send, ^{WheelDown} ;---- CapsLock + D === Copy Current Line ----
CapsLock & d:: send, {Home}+{End}^c{End} ;---- CapsLock + T === Insert Current Time ----
CapsLock & t:: Send, %A_YYYY%{Asc 45}%A_MM%{Asc 45}%A_DD%{Asc 32}%A_Hour%{Asc 58}%A_Min%{Asc 58}%A_Sec% ;---- U === Word Before ----
CapsLock & u::
if getkeystate("alt") = 0
Send, ^{Left}
else
Send, ^+{Left}
return ;---- O === Word After ----
CapsLock & o::
if getkeystate("alt") = 0
Send, ^{Right}
else
Send, ^+{Right}
return ;---- P === PageDown ----
CapsLock & p::
if getkeystate("alt") = 0
Send, {PgDn}
else
Send, +{PgDn}
return ;---- Y === PageUp ----
CapsLock & y::
if getkeystate("alt") = 0
Send, {PgUp}
else
Send, +{PgUp}
return ;---- H === Home ----
CapsLock & h::
if getkeystate("alt") = 0
Send, {Home}
else
Send, +{Home}
return ;---- ; === End ----
CapsLock & `;::
if getkeystate("alt") = 0
Send, {End}
else
Send, +{End}
return ;---- J === Left ----
CapsLock & j::
if getkeystate("alt") = 0
Send, {Left}
else
Send, +{Left}
return ;---- K === Down ----
CapsLock & k::
if getkeystate("alt") = 0
Send, {Down}
else
Send, +{Down}
return ;---- I === Up ----
CapsLock & i::
if getkeystate("alt") = 0
Send, {Up}
else
Send, +{Up}
return ;---- L === Right ----
CapsLock & l::
if getkeystate("alt") = 0
Send, {Right}
else
Send, +{Right}
return ;---- Mouse Controller ----
CapsLock & Up:: MouseMove, 0, -10, 0, R ; Mouse Up
CapsLock & Down:: MouseMove, 0, 10, 0, R ; Mouse Down
CapsLock & Left:: MouseMove, -10, 0, 0, R ; Mouse Left
CapsLock & Right:: MouseMove, 10, 0, 0, R ; Mouse Right ;---- CapsLock + Enter(Push Release) === Mouse Left Push(Release) ----
CapsLock & Enter::
SendEvent {Blind}{LButton down}
KeyWait Enter
SendEvent {Blind}{LButton up}
return ;---- Scroll Left ----
CapsLock & WheelUp:: ; 向左滚动
ControlGetFocus, fcontrol, A
Loop 2 ; <-- 增加这个值来加快滚动速度
SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 是 WM_HSCROLL, 它后面的 0 是 SB_LINELEFT
return ;---- Scroll Right ----
CapsLock & WheelDown:: ; 向右滚动
ControlGetFocus, fcontrol, A
Loop 2 ; <-- 增加这个值来加快滚动速度
SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 是 WM_HSCROLL, 它后面的 1 是 SB_LINERIGHT
return

2. Linux 之 Xmodmap

但在使用 Linux 时,没有了AutoHotKey的按键映射,很不习惯,最后找到了Xmodmap的解决方案。参考链接:Xmodmap (简体中文),这里也把配置文件~/.Xmodmap分享出来,如下所示:

!-- xmodmap ~/.Xmodmap --!
! Caps_Lock -> Mode_switch
clear lock
add mod5 = Caps_Lock
keycode 66 = Mode_switch ! Caps_Lock + \ -> Caps_Lock
keycode 51 = backslash bar Caps_Lock ! Caps_Lock + space -> Escape
keycode 65 = space NoSymbol Escape ! Caps_Lock + q -> Enter
keycode 24 = q Q Return ! Caps_Lock + r -> Menu
keycode 27 = r R Menu ! Caps_Lock + , -> Delete
keycode 59 = comma less Delete ! Caps_Lock + m -> BackSpace
keycode 58 = m M BackSpace ! Caps_Lock + y -> PageUp
keycode 29 = y Y Prior ! Caps_Lock + p -> PageDown
keycode 33 = p P Next ! Caps_Lock + i -> Up
keycode 31 = i I Up ! Caps_Lock + k -> Down
keycode 45 = k K Down ! Caps_Lock + j -> Left
keycode 44 = j J Left ! Caps_Lock + l -> Right
keycode 46 = l L Right ! Caps_Lock + h -> Home
keycode 43 = h H Home ! Caps_Lock + ; -> End
keycode 47 = semicolon colon End

具体的功能实现过程可参考上述链接 Xmodmap 以及 Xmodmap Command。不足之处:Xmodmap需要X图形界面的环境支持,在没有安装图形界面的纯文本命令行模式下无法运行;另外,其无法实现组合键的映射,只能实现单一按键或组合按键到某一按键的映射,因此Xmodmap仅仅实现了以上AutoHotKey部分的单个按键的映射(具体仅包含以下按键:CapsLock、Escape、Enter、Menu、Delete、BackSpace、PgUp、PgDn、Up、Down、Left、Right、Home、End)。这里注意:由于CapsLock本身映射为了无意义的Mode_switch按键,所以不能再直接映射为ESC按键了,此时ESCCapsLock + Space来实现,CapsLock功能依然由CapsLock + \来实现。

Linux 中的 AutoHotKey 键映射替代方案的更多相关文章

  1. Linux中的AutoHotKey键映射替代方案

    Windows--AutoHotKey 初次了解AutoHotKey,是在Win下最爱效率神器: AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不在赘余. ...

  2. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

    基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...

  3. linux中的 IO端口映射和IO内存映射

    参考自:http://blog.csdn.net/zyhorse2010/article/details/6590488 CPU地址空间 (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬 ...

  4. Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

    Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...

  5. linux中设置TAB键的宽度

    对于编程的人员来说,常常须要排版代码,这时候就须要TAB键,但TAB键的宽度太大,非常有可能代码太长,延伸到下一行,这个时候你就须要设置TAB键的宽度了. linux下设置TAB键的宽度,做法例如以下 ...

  6. linux中终端控制键Ctrl+C,Ctrl+Z,Ctrl+D的使用场合

    1.Ctrl+C比较暴力,就是发送Terminal到当前的程序,比如你正在运行一个查找功能,文件正在查找中,Ctrl+C就会强制结束当前的这个进程.2.Ctrl+Z是把当前的程序挂起,暂停执行这个程序 ...

  7. linux中如何使用微软鼠标的第4、5键

    虽说使用linux的 人大都对微软没什么好感,但不能否认微软确实也出了不少好东西呀,比如微软鼠标(IE系列) icon_smile.gif IE 2.0和以上版本都有5个按钮,除了正常的左中右外,两侧 ...

  8. Vim中的键映射【转】

    转自:http://www.cnblogs.com/softwaretesting/archive/2011/09/28/2194515.html http://www.pythonclub.org/ ...

  9. [转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法

    [From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952 ...

随机推荐

  1. JAVA基础——标识符和数据类型

    注释 单行注释 // 多行注释 /* */ 文档注释 /***/ 标识符和关键字 所有的标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(_)开始 首字符之后可以时字母(A-Z或者a ...

  2. 【转载】Python 代码调试技巧

    https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...

  3. Linux系统(控制节点)部署环境

    环境部署 重点说明:安装ansible时去控制Windows机器,由于需要在Linux系统上安装pywinrm插件,而使用yum安装锝ansible是无法调用pywinrm插件,所以整体使用pip工具 ...

  4. Docker的镜像及容器常用操作(2)

    一.docker镜像 镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务器 ...

  5. linux服务之NFS服务篇

    一.概念 NFS(Network File Server) 网络文件系统(映射).网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录和文件. ...

  6. 【转载】java与xml

    原文地址:http://www.lai18.com/content/1198237.html java项目中,xml文件一般都是用来存储一些配置信息一般的编程, 多数用来存储配置信息 . 拿JDBC来 ...

  7. unity 2017 卡在 loading界面

    看了网上很多方法,都不奏效. 提供一个简单的方法,不妨一试! 打开其他版本unity,登陆你的账户,再打开unity2017即可!

  8. untiy项目中使用MD5加密

    没有详细研究过暂时贴上代码以便以后研究: public static string MD5Encrypt(string strText) { MD5 md5 = MD5.Create(); byte[ ...

  9. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  10. Eclipse修改方法内容不用重启Jetty服务器

    我Eclipse以前DEBUG模式时,修改方法里的内容是不用重启的, 现在修改方法里是一行代码都要重启服务器了,很麻烦,速度慢了,找了百度,那些方法对我不合适,可能遇到的问题不一样. 也许会合适遇到和 ...