2016-07-06 87 views
1

我試圖在我的vim箭頭鍵沒用習慣^hĴķ升重映射箭頭鍵vim的

將幾行添加到我的.vimrc文件後,所有工作都正常,但插入模式重新映射。

nnoremap <Down> :echo "No down for you!"<CR> 
vnoremap <Down> :<C-u>echo "No down for you!"<CR> 
inoremap <Down> :<C-o> echo "No down for you!"<CR> 

nnoremap <Up> :echo "No up for you!"<CR> 
vnoremap <Up> :<C-u>echo "No up for you!"<CR> 
inoremap <Up> :<C-o>echo "No up for you!"<CR> 

nnoremap <Left> :echo "No left for you!"<CR> 
vnoremap <Left> :<C-u>echo "No left for you!"<CR> 
inoremap <Left> :<C-o>echo "No left for you!"<CR> 

nnoremap <Right> :echo "No right for you!"<CR> 
vnoremap <Right> :<C-u>echo "No right for you!"<CR> 
inoremap <Right> :<C-o>echo "No Right for you!"<CR> 

的問題是,每一個箭頭鍵被按下時它插入下面的字符串到我的文件:

:回聲「無****你

+1

它更好地適應hjkl,這是默認的一個原因,我對vim也很新,但hjkl默認真的有幫助。我最近發現,j和k鍵也是'evince'中滾動pdf文檔的默認值。所以這個習慣在vim之外確實會受益,並且在這裏習慣它是一種[有趣的方式](http://vim-adventures.com/) –

+0

感謝@Imran,已經做了vim advetures。這是一個很好的開始。 –

+3

在你的插入模式映射''應該出現在':'後面,例如左邊的那個鍵是'inoremap :echo「沒有給你! ' – dNitro

回答

0

!我們有Vim提供的vi.SE,總是比較好直接發佈。總之:

Sardorbek的回答是正確的,映射到<nop>的正確解決方案。即此:

noremap <Up> <nop> 
noremap <Down> <nop> 
noremap <Left> <nop> 
noremap <Right> <nop> 

inoremap <Up> <nop> 
inoremap <Down> <nop> 
inoremap <Left> <nop> 
inoremap <Right> <nop> 

然而,你inoremap被行打印到文件的原因是因爲你沒有在你映射的開頭使用<c-o>:之後,因此正常模式下的命令,目前正在運行是e(不是:echo)。我相信你看到的線實際上是:

:cho "No **** for you! 

而且不

:echo "No **** for you! 

此外,<c-o>只允許一個正常模式下的命令,但你需要兩個:回聲消息,並且否定箭頭關鍵運動。

在本質上,下面是可怕(真的太可怕了,請不要這樣做),但會工作:

inoremap <Down> <esc>:echo "No down for you!"<CR>ki 
inoremap <Up> <esc>:echo "No up for you!"<CR>ji 
inoremap <Left> <esc>:echo "No left for you!"<CR>li 
inoremap <Right> <esc>:echo "No Right for you!"<CR>hi 

在一般情況下,使用<esc>最好<c-o>c-u(視覺模式)儘可能。