使用PhpStorm IdeaVim,我不能使用shift +箭头键来选择单词

kid*_*chu 31 vim intellij-idea phpstorm ideavim

我正在使用带有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

在他们的错误跟踪系统中打开了一张票,没有任何修复.所以我想我不能做我上面所描述的.

tha*_*llo 30

我会~/.ideavimrc用以下几行创建一个

nmap <S-Up> v<Up>
nmap <S-Down> v<Down>
nmap <S-Left> v<Left>
nmap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <Right>
imap <S-Up> <Esc>v<Up>
imap <S-Down> <Esc>v<Down>
imap <S-Left> <Esc>v<Left>
imap <S-Right> <Esc>v<Right>
Run Code Online (Sandbox Code Playgroud)

它使我的代码以相同的方式选择文本.

  • 这次真是万分感谢. (3认同)
  • 只是评论:@jbyler 的答案最终更加实用,因为它暂时禁用了 ideavim,这样它就不会干扰其他 IntelliJ 功能。例如,当我需要使用多个光标时,我禁用ideavim,使用多个光标编辑我想要的内容,然后我直接回到vim。 (2认同)

小智 26

使用以下行创建〜/ .ideavimrc文件

nnoremap <S-Left> :action EditorLeftWithSelection<CR>
nnoremap <S-Right> :action EditorRightWithSelection<CR>
nnoremap <S-Up> :action EditorUpWithSelection<CR>
nnoremap <S-Down> :action EditorDownWithSelection<CR>

inoremap <S-Left> <C-O>:action EditorLeftWithSelection<CR>
inoremap <S-Right> <C-O>:action EditorRightWithSelection<CR>
inoremap <S-Up> <C-O>:action EditorUpWithSelection<CR>
inoremap <S-Down> <C-O>:action EditorDownWithSelection<CR>
Run Code Online (Sandbox Code Playgroud)

  • 这非常有效.这应该是公认的答案. (4认同)
  • 这比/sf/answers/2220019511/更好,因为我可以将Shift与箭头(和Option / Alt)结合使用,并在选择中添加/减去一个单词。如果我进行初始选择,然后在按住Shift的同时尝试更改它,则另一种解决方案将失败。 (2认同)
  • 看起来这在最新版本中已被破坏。有什么想法如何通过 .ideavimrc 修复它吗? (2认同)
  • 此映射适用于正常和插入模式。但从 0.52 开始,创建选择会将 IdeaVim 切换到 Visual 或 Select 模式,并且未指定这些映射。添加另一个带有“vnoremap”和可能的“snoremap”的块,它应该按预期工作。但是,还请查看 0.52 中添加的`:set keymodel^=startsel`,以正确解决该问题(尽管插入模式存在问题 - [VIM-1756](https://youtrack.jetbrains.com /问题/VIM-1756)) (2认同)

小智 10

似乎不可能开箱即用.但是,只要你有ideavim,就不难破解插件去除shift +箭头键的硬编码vim动作.这具有允许使用默认行为的效果.

脚步:

  1. git clone https://github.com/JetBrains/ideavim.git
  2. 在ideavim中打开新克隆的项目.
  3. 在文件/项目结构中设置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. 通过选项/插件/从磁盘安装插件重新安装插件并找到 ideavim/out/dist/ideavim-xx-dev.zip


Cla*_*vum 6

2021年答案

其他答案对我来说仍然有问题,选择不能准确工作,或者不能在视觉模式下工作。

@citizenmatt 在评论中提到使用“set keymodel=startsel”,但我对此有很多问题。即使松开 Shift 后它仍会继续选择,并且选择的开始位置有时会移动一个字符。

如果要撤消“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)
Run Code Online (Sandbox Code Playgroud)

这使用新的<Action>语法,因此您不必担心使用<C-O>递归映射或冲突。你永远不会离开原来的模式。


jby*_*ler 5

如果您有启用/禁用 IdeaVIM 的绑定,您可以通过暂时禁用 IdeaVIM,然后使用移位箭头选择,然后重新启用 IdeaVIM 来获得移位箭头选择。

Keymap 对话框中的操作称为“Vim Emulator”,在“Default”键盘映射中它绑定到??V;在“Mac OS X 10.5+”键盘映射中,它绑定到??V.

您可以在 Preferences => Keymap 对话框或 Help => Find Action... 菜单中查找您的键盘映射的快捷方式。

(注意:?也称为“选项”或“alt”;?是 Mac 上的“命令”键。)