V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quilt
V2EX  ›  程序员

vim 式上下左右模拟, mac 和 win

  •  1
     
  •   quilt · 2018-07-14 18:46:46 +08:00 · 2803 次点击
    这是一个创建于 2323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然自己的 vim 水平只能上下移动,但是依然很喜欢手不离开键盘就能实现光标移动。所以就想能够在所有程序中都能实现,但是虽然很多应用程序都有 vim 插件,毕竟不通用。

    后来就发现了 touchcursor,在 win 平台能实现 space+相应按键实现。也算是曲线救国了。

    后来就一直寻思 mac 平台可不可以,发现 hammerspoon,又对照着 lua 的语法手册写了个简单的实现。今天更新软件时突然想加个空格加 Y 键实现鼠标右键,发现看不懂之前写的了,所以寻思着找个觉得这个思路可用的同学告诉我一下怎么弄。

    最后附上 hammerspoon 的 init.lua https://gist.github.com/zzquilt/f39bb858d7d5c954349d3b7edadfbad0

    也欢迎大佬指出不足和能改进的地方。

    第 1 条附言  ·  2018-07-15 20:09:44 +08:00
    好像让大家误会了,是用 space+j 实现键盘摁下了下键,不是控制鼠标
    8 条回复    2018-07-15 20:12:30 +08:00
    caixiexin
        1
    caixiexin  
       2018-07-14 19:20:49 +08:00 via Android
    Windows 的话,用 autohot key 就行了
    或者买一把 poker2 可编程键盘,就能自编程实现 vim 风格移动光标
    caixiexin
        2
    caixiexin  
       2018-07-14 19:24:28 +08:00 via Android
    以前用过的 ahk 脚本,希望对你有帮助:


    ;使用 space 作为修饰键实现 vim 风格,同时保证 space 能正常使用
    space::Send, {space}

    ;使 win10 语言切换能正常使用
    #Space::
    Send #{Space}
    return

    ;vim 风格按键
    space & h::Send {left}
    space & j::
    IfWinNotActive ,ahk_exe ONENOTE.EXE
    {
    Send {down}
    Return
    }
    Else
    {
    ;解决 onenote 下上下键映射无效的问题
    Send ^{down}
    Return
    }
    space & k::
    IfWinNotActive ,ahk_exe ONENOTE.EXE
    {
    Send {up}
    Return
    }
    Else
    {
    Send ^{up}
    Return
    }
    space & l::Send {right}
    space & i::Send {home}
    space & ,::Send {end}

    #!i::
    Send !{Insert}
    return
    #!h::
    Send !{left}
    return
    #!l::
    Send !{right}
    return

    #+h::
    Send +{left}
    return
    #+l::
    Send +{right}
    return
    #+j::
    Send +{down}
    return
    #+k::
    Send +{up}
    return
    #+i::
    Send +{home}
    return
    #+,::
    Send +{end}
    return

    space & f::
    Send {Enter}
    return

    space & c::
    Send +{End}
    Send {Del}
    return

    space & d::
    Send {Home}
    Send +{End}
    Send {Del}
    Send {Down}
    Send {Home}
    return

    space & x::
    Send {Del}
    return
    space & BackSpace::
    Send {Del}
    return

    space & v::
    Send {Home}
    Send +{End}
    return
    space & y::
    Send {Home}
    Send +{End}
    Send ^{c}
    return
    space & p::
    Send +{Ins}
    return
    ;合并两行
    ;space & space::
    ; Send {End}
    ; Send {Del}
    ;return
    space & o::
    Send {End}
    Send {Enter}
    return
    space & u::
    Send ^{z}
    return


    space & n::
    Send {PgDn}
    return
    space & m::
    Send {PgUp}
    return
    quilt
        3
    quilt  
    OP
       2018-07-14 22:23:06 +08:00
    @caixiexin 我已经用 touchcursor 实现了,就是 mac 平台差个 space+y 实现鼠标右键。其实挺讨厌写脚本的,就像 mac 下的 lua,过一段时间,再看和天书似的
    LudwigWS
        4
    LudwigWS  
       2018-07-14 23:53:56 +08:00
    键盘控制光标,感觉不是很方便啊。理想的方式是能够捕捉到程序的各个能够点击的组件,然后通过组合键模拟点击,以前似乎看到过这方面的软件。
    yanaraika
        5
    yanaraika  
       2018-07-14 23:54:58 +08:00
    买个带小红点的键盘吧,这么模拟效率不高
    sqsgalaxys
        6
    sqsgalaxys  
       2018-07-15 00:24:45 +08:00
    Mac 全局输入区域的 Emacs 快捷键吧? c+n j c+p k c+f l c+b h c+a home c+e end c+d delete ..
    deepkolos
        7
    deepkolos  
       2018-07-15 10:48:49 +08:00
    还有一种选择: 制作一个 teensy usb to usb 转接器, 全平台兼容, 任意自定义键盘组合键

    https://geekhack.org/index.php?topic=69169
    quilt
        8
    quilt  
    OP
       2018-07-15 20:12:30 +08:00
    @deepkolos 我觉得硬件总是不方便,不过也是一个方案
    @sqsgalaxys win 平台可就不存在了,现在主要是在 win 平台开发,所以还是想个基本一致的体验
    我现在也就差个 mac 平台 space+y 实现鼠标右键,实在是不想去看 lua 的写法了😢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2502 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 15:29 · PVG 23:29 · LAX 07:29 · JFK 10:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.