2014-02-11 134 views
15

我正在使用PhpStorm 7.1.2和IdeaVim插件。使用PhpStorm IdeaVim,我不能使用shift +箭頭鍵來選擇單詞

在插入模式下,我想使用Shift + ArrowKey選擇單詞。然而,這個IdeaVim插件似乎阻止了這樣做。我只能使用v鍵在命令模式下突出顯示單詞。

shift+Home/End/PageDown/PageUpshift+ctrl+arrowKeys都無法正常工作。

我嘗試在鍵盤映射設置中更改快捷鍵(即選擇右鍵=> shift +右鍵),但沒有奏效。

有什麼辦法可以實現這種非vim行爲?

更新1

有他們的bug tracking system打開沒有任何修復票。所以我想我不能做我上面描述的。

+0

〜/ .ideavimrc文件,爲什麼你需要的插件?我想你喜歡在vim中編輯。如果是這樣,問問自己,如果有可能在純vim中做到這一點。你如何在vim中進行編輯? – Kent

+0

@Kent儘管我很喜歡vim如何實現移動和編輯功能,但有些場合我希望在插入模式下使用正常的shift鍵功能。這不是一個問題,我可以在純Vim中進行移位操作。相反,我問「我可以使用IdeaVim插件在PhpStorm中進行移位操作嗎」 – kidonchu

+0

您似乎已經有了答案。 – romainl

回答

3

如果您有啓用/禁用IdeaVIM的綁定,您可以通過臨時禁用IdeaVIM,然後使用shift-arrow選擇,然後重新啓用IdeaVIM來獲得移位箭頭選擇。

在鍵盤映射對話框中的動作被稱爲「Vim的仿真器」,並且在「默認」鍵映射勢必^V;在「Mac OS X 10.5+」鍵盤映射中,它綁定到V

您可以在Preferences => Keymap對話框中,或者通過Help => Find Action ...菜單查找鍵盤快捷鍵。

(注:也被稱爲「選項」或「ALT」; 是在Mac上的「命令」鍵。)

10

這似乎是不可能的開箱即用。但是,只要你有ideavim,就不難破解這個插件去除shift +箭頭鍵的硬編碼vim動作。這具有使用默認行爲的效果。

步驟:

  1. git clone https://github.com/JetBrains/ideavim.git
  2. 打開在ideavim新克隆的項目。
  3. 在文件/項目結構中設置intellij sdk依賴項(如有必要)。編號ideavim/src/com/maddyhome/idea/vim/RegisterActions.java
  4. 刪除所有重定義shift +箭頭鍵的關鍵操作::s%/^.*KeyEvent.VK_\(KP_\)\?\(LEFT\|RIGHT\|UP\|DOWN\), KeyEvent.SHIFT_MASK.*$//
  5. 使用ant任務clean compile dist重建。
  6. 重新安裝通過選項/插件插件/安裝插件從磁盤,並找到ideavim/out/dist/ideavim-xx-dev.zip
+0

謝謝你的提示喬!我創建了一個分支,其中包含所做的所有更改和最新的安裝說明:https://github.com/epegzz/ideavim – epegzz

+0

是的,這絕對需要是插件中的某種選項。 – Shaun

17

我將創建如下的~/.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> 

這使得以同樣的方式我的代碼選擇文本。

+2

謝謝你。 –

+0

只是一個評論:@jbyler的答案最終是更實際的,因爲它暫時禁用ideavim,以便它不會干擾其他IntelliJ功能。例如,當我需要使用多個遊標時,禁用ideavim,使用多個遊標來編輯我想要的內容,然後直接回到vim。 – thalesmello

2

創建具有以下行

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> 
+0

這工作完美。它應該是被接受的答案。 –

相關問題