2016-05-12 16 views
2

我將列號設置爲相對模式,因爲我不想計數。 我也有nnoremap ped jgj,以便更容易使用線條包裝。問題是,當我在包裝線上做一個動作(比如2j)時,它不會將我移動兩行,而是兩個「行」。Vim - 根據上下文映射替代關鍵行爲

爲了解決這個問題,我想有j映射到gj定期運動,但鑑於count時像普通j。我在vimrc嘗試下面的命令:

" Up and down now don't skip line-wraps unless given count 
fun! MoveLines(lines, type) 
    if (a:lines == 1) 
     let a:str = 'g' . a:type 
    else 
     let a:str = a:lines . a:type 
    endif 
    call feedkeys(a:str) 
endfun 

nnoremap <silent> j :<C-U>call MoveLines(v:count1, 'j')<CR> 

,當我只按j這工作得很好。問題是,當我試圖給它一個計數:它會自動遞歸調用(如預期的那樣)。我可以嘗試使用cursor,但是有沒有可能這樣做?

如何在沒有計數的情況下有條件地將j映射爲gj,但在給定計數時表現正常?

回答

3

您可以使用v:count來獲得給定的當前計數。如果沒有提供,它將被設置爲零。

nnoremap <expr> j v:count == 0 ? 'gj' : 'j' 

如需更多幫助,請參見:

:h v:count 
:h :map-<expr> 
+0

我知道有一個更簡單的方法!好多了;謝謝 – DavisDude