40

IdeaVim プラグインで PhpStorm 7.1.2 を使用しています。

挿入モードで、 を使用して単語を選択したいShift + ArrowKey。ただし、この IdeaVim プラグインはそれを妨げているようです。キーを使用してコマンドモードでのみ単語を強調表示できvます。

shift+Home/End/PageDown/PageUpまたはshift+ctrl+arrowKeysすべてが正しく動作しません。

Keymap 設定でショートカットを変更してみました (つまり、Select to Right => shift+right) が機能しませんでした。

この非 vim 動作を実現する方法はありますか?

更新 1

バグ追跡システムで未修正のチケットが開かれています。なので、上に書いたようなことはできないと思います。

更新 2 (2019 年 11 月 14 日)

そのバグ チケットのこの最後のコメントから、ideaVim はこの shift+arrowKeys の選択をサポートするようになりました。この質問をしてから数年後に intellij から純粋な vim に移行したので、これを試すつもりはありませんが、完全を期すためにこの質問を更新したかっただけです。この更新を書いた後に @citizenmatt の回答を見たので、詳細については以下の @citizenmatt の回答を参照してください。

4

10 に答える 10

10

そのままでは使用できないようです。ただし、ideavim がある限り、プラグインをハッキングして Shift + 矢印キーのハードコーディングされた vim アクションを削除することは難しくありません。これには、デフォルトの動作を使用できるという効果があります。

手順:

  1. git clone https://github.com/JetBrains/ideavim.git
  2. 新しく複製したプロジェクトを ideavim で開きます。
  3. Files / Project Structure で intellij sdk の依存関係を設定します (必要な場合)。
  4. 編集しideavim/src/com/maddyhome/idea/vim/RegisterActions.javaます。
  5. Shift+矢印キーを再定義するすべてのキー アクションを削除します): :s%/^.*KeyEvent.VK_\(KP_\)\?\(LEFT\|RIGHT\|UP\|DOWN\), KeyEvent.SHIFT_MASK.*$//.
  6. Ant タスクを使用して再構築しclean compile distます。
  7. Options / Plugins / Install Plugin From Disk からプラグインを再インストールし、見つけますideavim/out/dist/ideavim-xx-dev.zip
于 2014-06-17T05:00:45.193 に答える
5

IdeaVIM を有効/無効にするバインディングがある場合は、IdeaVIM を一時的に無効にしてからシフト矢印選択を使用し、IdeaVIM を再度有効にすることで、シフト矢印選択を取得できます。

キーマップダイアログのアクションは「Vim Emulator」と呼ばれ、「デフォルト」キーマップではバインドされています⌃</kbd>⌥</kbd>V; in "Mac OS X 10.5+" keymap it is bound to ⌥</kbd>⌘</kbd>V.

[設定] => [キーマップ] ダイアログ、または [ヘルプ] => [アクションの検索...] メニューで、キーマップのショートカットを検索できます。

(ノート:⌥</kbd> is also called "option" or "alt"; ⌘</kbd> is the "command" key on a Mac.)

于 2014-04-29T18:48:20.793 に答える
2

2021年の答え

他の回答には、選択が正確に機能しない、またはビジュアルモードで機能しないという問題がまだあります。

@citizenmatt はコメントで「set keymodel=startsel」を使用するように言及しましたが、これには多くの問題がありました。シフトを離しても選択が続き、選択の開始位置が1文字ずれることがあった。

「set keymodel=startsel」を元に戻したい場合は、代わりにデフォルトの「set keymodel=startsel,stopsel」を使用します

解決

これを ~/.ideavimrc に追加します:

nmap <S-Left> <Action>(EditorLeftWithSelection)
nmap <S-Right> <Action>(EditorRightWithSelection)
nmap <S-Up> <Action>(EditorUpWithSelection)
nmap <S-Down> <Action>(EditorDownWithSelection)
imap <S-Left> <Action>(EditorLeftWithSelection)
imap <S-Right> <Action>(EditorRightWithSelection)
imap <S-Up> <Action>(EditorUpWithSelection)
imap <S-Down> <Action>(EditorDownWithSelection)
vmap <S-Left> <Action>(EditorLeftWithSelection)
vmap <S-Right> <Action>(EditorRightWithSelection)
vmap <S-Up> <Action>(EditorUpWithSelection)
vmap <S-Down> <Action>(EditorDownWithSelection)

これは新しい構文を使用するため、再帰マッピングの<Action>使用や競合について心配する必要はありません。<C-O>元のモードから離れることはありません。

于 2021-08-31T16:10:10.400 に答える
1

Clavum の回答 ( https://stackoverflow.com/a/69002041/18003382 ) に追加するには、次のように Shift-Home と Shift-End を追加して、現在の選択を行の先頭と末尾に移動します。

nmap <S-Home> <Action>(EditorLineStartWithSelection)
nmap <S-End> <Action>(EditorLineEndWithSelection)
imap <S-Home> <Action>(EditorLineStartWithSelection)
imap <S-End> <Action>(EditorLineEndWithSelection)
vmap <S-Home> <Action>(EditorLineStartWithSelection)
vmap <S-End> <Action>(EditorLineEndWithSelection)
于 2022-01-22T16:06:05.297 に答える