CapsLock私のものにマッピングしたいですEscape。どのようにCapsLock表現しますか.vimrc
?
私は次のようにコマンドにスペースをマップする方法を知っています。
:map <space> viw
レジストリハックをせずに私が探しているVimコマンドCapsLockにマッピングするにはどうすればよいですかEscape?
ハッキングや他のソフトウェアがなければ、これが不可能な場合jj。私は現在これをやっています:ESC.vimrc
inoremap jj <esc>
しかし、ビジュアルモードでは動作しません。jjEscキーをどのようにシミュレートできますか?
答え1
答え2
と交換する代わりにCaps LockマッピングEscapeするには、次のようにします。Escape
setxkbmap -option caps:escape
変える...:swapescape
。
使用
setxkbmap -option
既存のオプションを消去するには、上記の方法が機能します。
答え3
xmodmap
Vimの起動時に、CalllockをCapslockをEscapeにマッピングできます。 Vimを離れた後は、変更を復元できます。次の行を次の行に追加します.vimrc
。
au VimEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
ただし、Vimセッションが複数ある場合、問題が発生する可能性があります。そのうちの1つを閉じるとxmodmap
グローバルに機能するため、すべての修正が元に戻ります。
答え4
~/.vimrc
または、ファイルで以下を試してください~/.vim/vimrc
。
:autocmd BufWinEnter * !setxkbmap -option caps:swapescape
:autocmd BufWinLeave * !setxkbmap -option
~/.bashrc
最初の行または代わりにエイリアスを使用できます~/.profile
。
alias vim="setxkbmap -option caps:swapescape && vim"
この方法の欠点は、vimを閉じない限り、CapsLockがEscapeになり、その逆も同様です。
解決策:
これを行うには、キーバインディングを使用して、必要なモード(InsertModeなど)中にのみタイムアウトを交換します。au CursorHoldI * stopinsert
au InsertEnter * silent! let updaterestore=&updatetime | set updatetime=15000 | execute "!setxkbmap -option caps:swapescape" | redraw!
au InsertLeave * silent! let &updatetime=updaterestore | execute "!setxkbmap -option" | redraw!
InsertModeの間、CapsLockとEscapeはシステム全体で交換されますが、InsertModeのタイムアウトを15000に設定したため、15秒間アクティビティがないと自動的に反転するため、心配する必要はありません。 ;-)
-ヒマンシュ