40

我正在使用带有 IdeaVim 插件的 PhpStorm 7.1.2。

在插入模式下,我想使用Shift + ArrowKey. 但是,这个 IdeaVim 插件似乎阻止了这样做。我只能使用v键在命令模式下突出显示单词。

shift+Home/End/PageDown/PageUpshift+ctrl+arrowKeys全部无法正常工作。

我尝试在 Keymap 设置中更改快捷方式(即选择到右 => shift+right),但没有奏效。

有什么办法可以实现这种非 vim 行为?

更新 1

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

更新 2(2019 年 11 月 14 日)

从那个 bug 票的最后一条评论来看,ideaVim 现在支持这种 shift+arrowKeys 选择。在问了这个问题几年后,我从 intellij 搬到了纯 vim,所以我不会尝试这个,但只想更新这个问题以确保完整性。并在编写此更新后看到了@citizenmatt 的答案,因此请参阅下面的@citizenmatt 的答案以获取更多详细信息。

4

10 回答 10

42

我会~/.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>

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

于 2015-07-30T03:06:02.730 回答
34

使用以下行创建 ~/.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>
于 2017-04-17T08:48:38.083 回答
10

开箱即用似乎是不可能的。然而,只要你有ideavim,破解插件来删除shift +箭头键的硬编码vim操作并不难。这具有让使用默认行为的效果。

脚步:

  1. git clone https://github.com/JetBrains/ideavim.git
  2. 在idevim中打开新克隆的项目。
  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
于 2014-06-17T05:00:45.193 回答
5

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

Keymap 对话框中的操作称为“Vim Emulator”,在“Default”键映射中它绑定到⌃</kbd>⌥</kbd>V; in "Mac OS X 10.5+" keymap it is bound to ⌥</kbd>⌘</kbd>V.

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

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

于 2014-04-29T18:48:20.793 回答
2

从 IdeaVim 0.52 开始,VIM-437已得到修复,您可以使用该'keymodel'选项来启用带有移位键和选择的特殊行为。如果您添加:set keymodel^=startsel到您的~/.ideavimrc,则 shift + 光标键会将您更改为可视模式(如果'selectmode'包含,则为选择模式key)。不幸的是,目前似乎存在一个错误,这意味着这仅适用于普通模式,而不适用于插入模式。参见VIM-1756

有更多选项'keymodel'可能有用。查看文档

于 2019-08-05T13:56:43.010 回答
2

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)

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

于 2021-08-31T16:10:10.400 回答
1

禁用 Vim 模拟器 2 种方式:

1.- Ctrl+alt+v / Cmd+alt+v
2.- Tools (menu) -> Vim emulator
于 2019-01-04T20:47:21.803 回答
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 回答
0

我已经破解了最新版本的 IdeaVim 以不绑定到箭头键。我发现 keymodel 并没有完全做到我想要的。我已经习惯了 Joe Thomas 在以前的版本中的 hack,无法改变我的方式。

我的破解版本可以在这里找到:https ://github.com/shaunpatterson/ideavim

于 2019-10-09T21:53:50.243 回答
0

我可以建议这可能不是一个好问题吗?

使用 vim 的一个优点是减少字母数字键和箭头之间的手臂移动量。使用 shift+arrow 违背了这个目的。

无需使用箭头即可实现单词选择的简单方法:

  1. 将光标定位在要选择的文本的开头
  2. 按下v进入可视模式(相当于shift按键)
  3. 将光标移动w一次或多次到要选择的文本的末尾。(这相当于按箭头)
  4. 根据需要剪切/复制
于 2019-11-14T12:20:31.640 回答