質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

4回答

2208閲覧

vim内だけでEscとCaps Lockを置き換える方法

tf2014

総合スコア75

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2017/08/10 18:02

編集2017/08/11 15:08

vimを使っている間だけ、つまりOS全体でキーマップを変えないで、EscCaps Lockを置き換えることが出来るでしょうか?

map <Esc> <???> map <???> <Esc>

上の様な設定で出来るのではないかと思うのですが、Caps Lockに当たる様なキーが:help key-notationの中に見つかりません。

更に、欲を言えば、他の人のコンピューターを使ったときでも、設定できるように、Vimのコマンドライン・モードで簡単に設定できればと望んでいます。つまり、.vimrcを触ることを回避したいということです。

よろしく、お願いします。


蛇足1:今までOSで EscCaps Lockを置き換えて使っていたのですが、他のアプリ(GUI)でキャンセルボタンを押す代わりに、Escを押すことに慣れてしまったので、Esc(結果としてCapsLock)を押してしまって、気づかないうちに大文字になっていたりVim外で不便に感じることが多かった。

蛇足2:EscCapsLockの置き換えをやめてしまったら、習慣でCaps Lockを押してしまい、大文字で入力されてしまい不便に感じることが多くなった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

作ってみましたが、動作確認はしていません。

https://github.com/mattn/vim-switch-esc-capslock

vim-plug などでインストール後、起動後に以下をタイプすると有効になります。

:call SetKeyboardHook(1)

もし動くようならもう少し改良(起動時に有効にするなど)するかもしれません。

投稿2017/08/12 13:39

編集2017/08/12 13:41
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshitia

2017/08/13 13:48

windows用ですか?
mattn

2017/08/13 14:14

はい。OS の一つに Windows7 Professional が書かれていたので。
yoshitia

2017/08/13 14:53 編集

追記 すみません。終了し忘れていたキー変更ソフトと競合して変な事になってただけでした。 狙い通りCaps Lock → Escの挙動になってました。 ----------------------------------------------------- windows8.1, kaoriya-vim 64bit 8.0.596 で試して AutoHotKeyでスキャンした所 [ キーとして認識されてるようです。 現場のマシンはwin7なのでそっちでも試してみます。
tf2014

2017/08/13 17:52

わざわざプラグイン作っていただいて、ありがとうございます。 使ってみます。Vim 初心者なので、悪戦苦闘すると思いますが…。後ほど、結果報告します。
yoshitia

2017/08/14 01:21

windows 7 professional 64bit sp1, kaoriya-vim 64bit 8.0.596で:call SwitchEscCapslock(1) したら、Caps LockがEscに切り替わってVim終了時にCaps Lockに戻る挙動になっていました。
tf2014

2017/08/14 18:19 編集

Vimプラグインを始めて使ってみました。(←いい勉強になりました。)さて、結果ですが、E107: Missing paranthesis: SetKeyboardHookと出てきます。 yoshitiaさんが挙動を確認しているので私のインストールに問題があると確信しているのですが、次の要領でインストールしたました。 1.vim-plug をインストール 2._vimrc ファイルに以下を追加: call plug#begin('~/.vim/plugged') Plug 'https://github.com/mattn/vim-switch-esc-capslock' call plug#end() 3.再起動して :PlugInstall。 結果は: ---------------------------------------------------------------------------- Updated. Elapsed time: 2.480225 sec. [=] - Finishing ... Done! - vim-switch-esc-capslock: Cloning into 'C:\Users\{ユーザー名}\.vim\plugged\vim-switch-esc-capslock'... ---------------------------------------------------------------------------- 4. 再起動して :call SetKeyboardHook E117: Unknown function: SetKeyboardHook 5.次に、:call SetKeyboardHook(1) E107: Missing parenthesis: SetKeyboardHook 「括弧が抜けているというエラーメッセージがない」というエラーメッセージということは関数だとは確認されているといるとおもうのですが。
yoshitia

2017/08/14 23:37 編集

補足です。 switch-esc-capslock.vimのVim scriptを確認したら 関数名がSwitchEscCapslockになっているので :call SwitchEscCapslock(1) で動きます。 SetKeyboardHookは hook.dllのソースコード、hook.c内の関数のようです。
yoshitia

2017/08/14 23:43

補足2 Vim scriptでVim終了時にCaps Lock→Esc切り替えをオフにするように書かれています。 起動したまま切り替えオフにする場合は :call SwitchEscCapslock(0) でできるはずです。
yoshitia

2017/08/14 23:52

私が動作確認できたのは自分でVim script読んで補足の点に気づいたからです。 そのあたりの説明省略しててすみませんでした。
tf2014

2017/08/15 05:23

コメントありがとうございます。 大変勉強になります。今まで、興味がなかった(もっと性格には恐れていた)プラグインに興味が出てきました。 それは置いておいて。 yoshitia さんのコメントを数回読み返してSetKeyboardHook(1) を試してみたのですが、違ったエラーが出てきました。E364 Library call failed for "SetKeyboardHook()"
yoshitia

2017/08/15 05:55

E364 Library call failed for "SetKeyboardHook()" 原因はわからないですがhook.dllからのSetKeyboardHook()呼出しを失敗して出てきたメッセージではないかと。 vimで :help E364 の様に入力したらエラー説明のヘルプが出てきます。
tf2014

2017/08/18 03:35

:help の使い方ありがとうございます。見てみましたが、解決は出来ませんでした。もう少し、VIMの知識があがるまで、この件は、保留しておこうと思います。 色々、試してみることで、質問の内容を超えて、とても勉強になりました。 色々コメントしていただいた方に感謝しています。 とりあえずは<c-[> と Esc に慣れようと思います。 
guest

0

ベストアンサー

Caps LockキーをEscキーに変えたいのはわざわざキーボードの左上に指を伸ばしたくないからだと推測するのですが
極力Vimの設定変えずにOSの設定変えずに、となると
デフォルトキーバインドの<C-[>でEscするって結論かと。

Vimを使っていてCaps Lockを別のキーに変えたいのは良くある話なので
質問者さんの希望を叶える方法があれば誰かが記事として
とっくに紹介してると思います。

現状Linuxならvimrcにxmodmap等のキーマップ変更コマンドを書くか
vim起動時にexモードで変更コマンド打つかになります。

windowsならAutoHotKeyでVimを起動している時だけキーマップ変更するスクリプトを書く事になります。

投稿2017/08/11 00:22

編集2017/08/11 00:36
yoshitia

総合スコア157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tf2014

2017/08/11 03:07

yoshitiaさんの推測どおり、キーボードの左上に指を伸ばしたくないからです。 「良くある話なので...(中略)...とっくに紹介してると思います。」> そう考えれば、その通りですよね。いろいろググったのですが、答えは見つからなかったので、きいてみました。 率直な回答、ありがとうございます。
guest

0

直接の回答では無いのですが、キーボードの種類と、OSを書いた方が良いのでは無いでしょうか。

例えば、JP106キーボードでは、「a」の左にあるのは「英数」キーで、「Shift+英数」で「CapsLock」になります。

X Windows Systemで動くgvimの場合は、Xの機能でアプリ毎にXリソースファイルを書いてKey Translation出来たはずですが、ちょっとググった感じでは情報が見つかりませんでした。

投稿2017/08/10 22:28

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tf2014

2017/08/11 04:05

返答ありがとうございます。  失礼しました、キーボードは、pc105+inet, OS は、Windows7 Professional, Ubuntu (unityデスクトップ), CentOS7(minimum install CUIのみ)です。 「Xリソースファイル」について調べてみようと思います。
otn

2017/08/11 22:46

gvimはインストールされているとは限らないこと、ファイルをいじる必要があること、から、 > 他の人のコンピューターを使ったときでも、設定できるように、 は、難しいですね。 なお、gvimでない限り、CapsLockのような「単独で文字コードを発生しないキー(モディファイアキー)」のマップは不可能です。vimにキーコードが渡らないので。
tf2014

2017/08/13 18:03

yoshitiaさんのご指摘の通り、「出来るなら誰かが紹介してるはず」なので結構諦めているところです。 モディファイアとか分からないうちに、ネットで見つけた小技の、Caps-lock Esc交換に慣れてしまったので…
guest

0

質問主本人です。色々検索していたら、すばらしい記事を発見したので紹介します。

Learn Vimscript the Hard Way

このページによると、インサートモードから脱出するには3つの方法があるそうで、それぞれ<esc><c-c><c-[>

その中で、<c-c>は知らなかったので試してみたら<c-[>同様に使いにくいです。そこで、紹介されているのがEscjkに変えるというものです。

頭の中で、「インサート・モードでjk押したって ’jk’ ってタイプされるだけやろ!」と、半信半疑で上のページに書いてあるコマンド試してみたところ上手くインサート・モードから脱出できました。

:inoremap jk <esc>

こういうコマンドを使うこと、(または.vimrcファイルを編集すること)でjkでインサートモードを脱出できました。これは使えそうです。

ただ、指がなれたCaps lockを押してしまうことをやめる習慣が抜けてないので、慣れるまで時間がかかりそうですけど。

もし、Caps LockEsc を交換する方法をご存知でしたら、コメントお願いいたします。

投稿2017/08/11 17:26

編集2017/08/12 04:28
tf2014

総合スコア75

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2017/08/11 22:39

複数キーの連続ががmapされているときは、 set timeoutlen=1000 だと、1000ミリ秒(1秒)以内に2番目のキーを押すとmapが有効になります。 1秒以上経って2番目のキーを押すと、2つの別々のキーが押されたことになります。 時間は好みで調整するといいでしょう。
tf2014

2017/08/13 17:41

なるほど! 勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問