相关文章推荐
暴走的感冒药  ·  Ubuntu ...·  1 年前    · 
AutoHotkey

AutoHotkey

  1. 下载 AutoHotkey
  2. 新建一个文件 key.ahk
  3. 复制粘贴下面代码



; docs  https://ahkcn.github.io/docs/misc/Clipboard.htm
; WIN   的符号是  #
; Ctrl  的符号是  ^
; Alt   的符号是  !
; Shift 的符号是  +
GroupAdd OneNoteGroup, ahk_exe onenote.exe
GroupAdd VsCodeGroup, ahk_exe Code.exe
; ; dev
; $^s::
;     Send ^{s}
;     sleep 100
;     reload, "C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\gljm.ahk"
; return
$!c::
    ClipSaved := ClipboardAll
    ClipBoard := "" ; 让剪贴板初始为空, 这样可以使用 ClipWait 检测文本什么时候被复制到剪贴板中.
    Send ^{c}
    ClipWait
    Send {End}
    Send {Enter}
    v1 := "console.log("
    v2 = %clipboard%
    ClipBoard :=  v1 "'" v2 " ->'" ", " v2 ")"
    Send ^{v} ;
return
$#p::
    ca := ClipboardAll
    ClipBoard =  ; 让剪贴板初始为空, 这样可以使用 ClipWait 检测文本什么时候被复制到剪贴板中.
    Send ^c
    ClipWait     ; 等待剪贴板中出现文本.
    Run powershell -NoExit -Command "pac '%ClipBoard%'"
    ClipBoard := ca
return
; ctrl + right -> alt + left  返回
$^RButton::
    Send !{Left}
return
; ctrl + 滚轮 -> alt + right  前进
$^MButton::
    Send !{Right}
return
$F8::  ; 把 F1 键设置为热键 ($ 符号会有助于下面 GetKeyState 的 "P" 模式).
; 由于没有指定数字, 所以这是个无限循环, 直到遇到内部的 "break" 或 "return".
Loop {
    ; 如果此状态为 true, 那么用户实际已经释放了 F1 键.
    if not GetKeyState("F8", "P") {
        break  ; 中断循环.
    ; 否则 (由于上面没有 "中断"), 继续点击鼠标.
    Click  ; 在当前指针位置点击鼠标左键.
return
$#s::
    ca := ClipboardAll
    ClipBoard =  ; 让剪贴板初始为空, 这样可以使用 ClipWait 检测文本什么时候被复制到剪贴板中.
    Send ^c
    ClipWait     ; 等待剪贴板中出现文本.
    FoundPos := RegExMatch(ClipBoard, "^(https?://|www\.)", Match)
    ; MsgBox, % "FoundPoss : " FoundPos "`n" "Match: " Match
    if (FoundPos) {
        run, chrome.exe "%ClipBoard%"
    } else {
        run, chrome.exe "https://www.google.com/search?q=%ClipBoard%"
        ; run, chrome.exe "https://www.baidu.com/s?wd=%ClipBoard%"
    ClipBoard := ca
return
$#d::
    ca := ClipboardAll
    ClipBoard =  ; 让剪贴板初始为空, 这样可以使用 ClipWait 检测文本什么时候被复制到剪贴板中.
    Send ^c
    ClipWait     ; 等待剪贴板中出现文本.
    FoundPos := RegExMatch(ClipBoard, "^(https?://|www\.)", Match)
    ; MsgBox, % "FoundPoss : " FoundPos "`n" "Match: " Match
    if (FoundPos) {
        run, chrome.exe "%ClipBoard%"
    } else {
        run, chrome.exe "https://www.baidu.com/s?wd=%ClipBoard%"
    ClipBoard := ca
return
; 选择路径, Win + o 打开文件或目录
; 复制路径, Win + o 打开文件或目录
$#o::
    ;                                             C:\ | C:/
    FoundPos := RegExMatch(ClipBoard, "(^[A-Za-z]:\\.*|^[A-Za-z]:/.*)", Match)
    if (Match) {
        Run powershell -Command "start '%ClipBoard%'"
        FileOpen("d:/FileName.txt", "a").Write("start '%ClipBoard%'")
    } else {
        oCB := ClipBoardAll
        ClipBoard =  ; 让剪贴板初始为空, 这样可以使用 ClipWait 检测文本什么时候被复制到剪贴板中.
        Send ^c
        ; ClipWait     ; 等待剪贴板中出现文本.
        FoundPos := RegExMatch(ClipBoard, "(^[A-Za-z]:\\.*|^[A-Za-z]:/.*)", Match)
        if (Match) {
            Run powershell -Command "start '%ClipBoard%'"
            ; Run powershell -NoExit -Command "start '%ClipBoard%'"
return
$!d::
    Send ^{d}
return
; 光标左移
$^b::
    Send {Left}
return
; 光标右移
$^f::
    Send {Right}
return
; 光标上移
; OneNote中无法直接映射上下, 改成^Up
$^p::
    if WinActive("ahk_group OneNoteGroup") {
        Send ^{Up}
    } else {
        Send, {Up}
return
; 光标下移
; OneNote中无法直接映射上下, 改成^D
$^n::
    if WinActive("ahk_group OneNoteGroup") {
        Send ^{Down}
    } else {
        Send, {Down}
return
; 光标移动到下个单词
$^#f::
    Send ^{Right}
return
; 光标移动到上个单词
$^#b::
    Send ^{Left}
return
; 光标移动到行首
$^a::
    Send {Home}
return
; 光标移动到行末
$^e::
    Send {End}
return
; 向左删除
$^h::
    Send {Backspace}
return
; 向右删除
$^d::
    Send {Del}
return
; 向左删除单词
$^#h::
    Send ^{Backspace}
return
; 向右删除单词
$^#d::
    Send ^{Del}
return
; 删除当前位置到行尾
$^k::
    Send +{End}
    Send {Del}
return
; 删除当前位置到行首
$^u::
    Send +{Home}
    Send {Backspace}
return
; 重新利用被占用热键
; win+f代替C-f(查找)
$#f::
    Send ^{f}
return
; win+f代替C-f(全局查找)
$#j::
    Send ^{j}
return
; win+n代替C-n(新建)
$#n::
    Send ^{n}
return
; win+a代替C-a(全选)
$#a::
    Send ^{a}
return
; win+h代替C-h(chrome查看历史记录)
$#h::
    Send ^{h}
return
; vscoede 向上移动一行
$!p::
    Send !{Up}
return
; vscoede 向下移动一行
$!n::
    Send !{Down}
return
$^o::
    Send {End}
    Send {Enter}
return
; 向左选择一行
$^+u::
    Send +{Home}
return
; 向右选择一行
$^+k::
    Send +{End}
return
; 向左选择一个单词
$^+b::
    Send +^{Left}
return
; 向右选择一个单词
$^+f::
    Send +^{Right}
return
; alt + b 输出 alt + Left
$!b::
    Send !{Left}