通常モードに戻ると、vimはCapslockを自動的にオフにできますか?


12

キャップに何かを入力するたびに、通常モードに戻るときにキャップロックをオフにするのを忘れています。それから、カーソルを動かして、たくさんの行や、これから起こるとは思わない多くのことを結合しようとします。

エスケープを押して通常モードに入るときにcapslockをオフにするようにvimを構成することは可能ですか?

OS固有のソリューションがある場合、Linuxに適用可能なソリューションに興味があります。


これを私の「ソリューションは、」私は間違いによる場合を除いて、それを使用しないようキャップが「ノーアクション」(MacOSの)にロック再マッピングすることだった
localhostdotdev

回答:


8

回答この質問は、それはそうではないことを示している- Vimはその電話をかけるためにOSにアクセスすることはできません。

ただし、Caps Lockが不要になるように動作を変更してみてください。にマップするための一般的なキーCtrlEscまたはMetaです。

Vimには、gU選択範囲またはモーションを大文字にする演算子があります。したがって、通常は入力して後で使用できます。関連する:gu小文字~に切り替えます。

オートコンプリートする方法もありますVERY_LONG_MACRO_NAMES。これにより、を入力する必要が少なくなります。


4

capslockをctrlに再マップしましたが、capslockを使用することはほとんどありません。ただし、vimで必要な場合は、tpope / vim-capslockをソフトウェアの一時的なcapslockとして使用できます。これを使用する場合、イベントのautocmdをセットアップしてcapslockをInsertLeave無効にするのはかなり簡単です。


3

通常モードでCaps Lockを自動的にオフにする方法を見つけました(ただし、Linuxでのみ機能します)。

プラグインを使用して作成されたソリューションでは、たとえばコマンドモードからなど、複数の方法(挿入から通常)で通常モードに入ることができることを考慮していません。

実際には、通常モードに入ったときにアクティブになるオートコマンドイベントはないため、代わりに使用したCursorHoldイベントは、通常モードで入力していないときにアクティブになるイベントでした。

au CursorHold * call TurnOffCaps()
set updatetime=10

更新時間を非常に小さな数に設定すると、何かを入力する前に常に更新時間がアクティブになります。

function TurnOffCaps()  
    let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
    if capsState == 'on'
        silent! execute ':!xdotool key Caps_Lock'
    endif
endfunction

これが質問に対する唯一の本当の答えだと思います。VimはCapsLockを何らかの方法で有効にするためにOSを呼び出す必要があります。もちろん、その方法はOSに依存します。
オクタビオール

2

別のオプションは、に再マップするCapsLockことEscです。これは私がここ数年使用しているマッピングです。CapsLockホーム行にあるので、タイプをタッチすれば本当に使いやすいです。また、挿入モードから抜け出すことがはるかに簡単であるため(キーはに近いEsc)、適切なVimの使用を促進します。

再マッピングは簡単です。Linuxはこれをネイティブにサポートします。MacOS XとWindowsでそれを実現する小さなアプリがあります。また、一部の高価なキーボードには、キーの再マッピングを可能にする機能が備わっています。


2

Avian Yの回答に加えて、実際には挿入モードを終了することをアクティブにする自動コマンドがあります。

au InsertLeave * call TurnOffCaps()

それはまさに私が探していたものでした...


1

私のAppleマシンでは、実際にKarabinerを使用してこの機能を実装しましたが、これはかなりうまくいきました。残念ながら、10.12はKarabinerを壊しました。それ以来、私はそれを実装しようとしませんでした。

以前に有効にした場合は、エスケープキーまたはEnterキーを使用してCaps Lockを無効にしました。

そのため、10.11以前でmacOSを使用している場合は、これを確実に行うことができます(設定を求めないでください。もう持っていません)。

それ以外の場合は、提案されたものを使用しgUます。(私はあなたに不満を理解できますが、他のテキストエディタで使用するのと同じ方法を使用できないことについて)


0

vimヘルプマニュアルには、挿入モードで単語をすべて大文字にするための非常に優れたマッピングがあります。

inoremap <c-h> <esc>gUiw`]a

それは使用していますctrl-hあなたは本当にこのマッピングを使って何を失っていないので、通常は単にバックスペースクローンです。

通常モードでは、Caps Lockは悪夢です!それがお役に立てば幸いです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.