2016-05-12 4 views
2

私はカウントしたくないので、相対モードに設定されたカラム番号を持っています。 私はnnoremapjgjを持っていますので、ラインラップで作業する方が簡単です。問題は、ラップされた行に動詞(2j)を置くと、2行上に移動するのではなく、2行に移動させるということです。それを固定するために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

関連する問題