首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VIM中映射大写锁键?

如何在VIM中映射大写锁键?
EN

Stack Overflow用户
提问于 2010-02-01 20:20:06
回答 16查看 72.3K关注 0票数 71

我在Windows下使用GVIM。并希望将胶囊锁映射到Ctrl+^

有办法做到这一点吗?

顺便说一句,我在网上看到了大量如何使用注册表hack来交换map和Esc的示例,但其中没有一个使用VIM map命令,而是使用外部工具和注册表更改。

EN

Stack Overflow用户

发布于 2017-10-02 05:14:42

不会中断的解决方案

vim之外

窗口

安装自动热键。

运行autohotkey脚本:

代码语言:javascript
运行
复制
;caps_to_esc.ahk
#IfWinActive, ahk_class Vim ; vim window class
Capslock::Esc
#IfWinActive

Ubuntu

运行以下命令:

代码语言:javascript
运行
复制
wget -O - https://raw.githubusercontent.com/grabantot/scripts/master/install/install_caps_to_esc.sh | bash

或者手动执行以下操作:

..。我们还将使用

(默认情况下应安装)。

创建

脚本:

代码语言:javascript
运行
复制
debug_file=/dev/shm/caps_to_esc.debug
debug_msg () {
  echo $(date +%s%3N) "$@" >> $debug_file
}

caps_off () {
  is_caps_on="false"
  xset q | grep "Caps Lock:\s*on" && is_caps_on="true"
  debug_msg "is_caps_on ""$is_caps_on"

  [ "$is_caps_on" == "false" ] && return 3
  debug_msg "Sending Caps Lock"
  debug_msg "ignore_next"
  xdotool key Caps_Lock
}

should_ignore="false"
tail -n 1 $debug_file | grep "ignore_next" && should_ignore="true"

if [ "$should_ignore" == "true" ]; then
  debug_msg "ignored"
  exit 1
fi

echo -n "" > $debug_file

# get wm_class by 'xprop | grep WM_CLASS'
declare -a wm_classes=( \
  'WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"' \
  'WM_CLASS(STRING) = "gvim", "Gvim"' \
  'WM_CLASS(STRING) = "code", "Code"' \
  'WM_CLASS(STRING) = "google-chrome", "Google-chrome"' \
)

active_window_id=$(xdotool getactivewindow)
active_window_wm_class=$(xprop -id $active_window_id WM_CLASS)
debug_msg "active_wm_class   ""$active_window_wm_class"

detected_wm_class=""
for wm_class in "${wm_classes[@]}"; do
  # debug_msg "$wm_class"
  if [ "$active_window_wm_class" == "$wm_class" ]; then
    detected_wm_class="$wm_class"
    debug_msg "detected_wm_class ""$detected_wm_class"
  fi
done

[ "$detected_wm_class" == "" ] && exit 2
xdotool keyup "Caps_Lock" # !!! very important
caps_off
debug_msg "Sending Escape"
xdotool key "Escape"
debug_msg "sent"

将新绑定添加到

代码语言:javascript
运行
复制
"bash $HOME/caps_to_esc.sh"
Caps_Lock

工作原理:

将确定Caps何时

_

按下Lock并调用

脚本

在脚本中检测活动窗口wm

_

类依据

检查是否为wm

_

类是我们感兴趣的(gnome-terminal、vscode、gvim、chrome),如果不是就退出

通过以下方式发送转义密钥

检查Caps Lock是否通过打开

如果是,则发送Caps

_

锁键通过

将检测Caps

_

锁定由我们发送,但我们忽略它

票数 10
EN
查看全部 16 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2176532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档