Vimは

2011-02-09 8 views
16

enter image description hereVimは

強調表示されたテキスト私が移動する先のアレイです。私はラインを下に移動するために、jを押す前にgを押す必要があります。私の.vimrcのためのマッピングがありますが、毎回hを押すことなく画面行を移動するためにhjklを使うことができます。あなたの助け マティアス

+0

私はVIM 7.2を使用しており、毎回gを打つ必要はありません。 -/ – Mikhail

+2

Mikhail、私は7.2を持っています。おそらくそれは設定の問題です。たとえば、jがすでに一連のコマンドにマップされているかどうかを調べるには、「:map j」と入力します。 –

+0

私はVIM 7.2.33を持っているので、私はそれらを押す必要があります。 –

答えて

14

次のスニペットを使用して、$のような行末までのすべての形式のナビゲートに役立ちます。

" mapping to make movements operate on 1 screen line in wrap mode 
function! ScreenMovement(movement) 
    if &wrap 
     return "g" . a:movement 
    else 
     return a:movement 
    endif 
endfunction 
onoremap <silent> <expr> j ScreenMovement("j") 
onoremap <silent> <expr> k ScreenMovement("k") 
onoremap <silent> <expr> 0 ScreenMovement("0") 
onoremap <silent> <expr>^ScreenMovement("^") 
onoremap <silent> <expr> $ ScreenMovement("$") 
nnoremap <silent> <expr> j ScreenMovement("j") 
nnoremap <silent> <expr> k ScreenMovement("k") 
nnoremap <silent> <expr> 0 ScreenMovement("0") 
nnoremap <silent> <expr>^ScreenMovement("^") 
nnoremap <silent> <expr> $ ScreenMovement("$") 
+0

砂糖のように働く:)、この助けをありがとう。非常に面白いクリーンな.vimrcがgithubにあります。 –

+7

オプション「」と「」が必要なのはなぜですか?それらがなければうまくいくように思えます...また、ちょうど '' gj''などを使うことができます。特に '' gj''は 'ラップされた... – naught101

20

ため

ありがとうございます(あなたが本当にhlを必要とするかどうかわからない...)jkキーを再マッピングすることができます

:map j gj 
:map k gk 

あなたは試したし、それらを言っていたら、追加それらはあなたの.vimrcに先行なし:

+4

これはうまくいきますが、 ':noremap'を使ってはいけないので、jは再帰的にマップしませんか?この例では本当に問題ではありませんが、それは良い習慣です。 – naught101

7

jとg(例えば)をgjとgkに簡単に再マップすることができます:

" map j to gj and k to gk, so line navigation ignores line wrap 
nmap j gj 
nmap k gk 
+2

これらを '.vimrc'にマップすると、マクロやプラグインで後で問題が発生する可能性があります。私は 'gj'と' gk'とタイプするのが面倒だと知っています。リーダーとマッピングするほうが良いでしょう。 –

+1

@jeleraリーダーとのマッピングはどういう意味ですか?だからあなたは ' j'と入力しなければなりませんか?通常は 'gj'よりもそれほど難しくありませんか? – naught101

1

これは、ラテックスドキュメントのような長いテキストファイルを編集する場合に適しています。しかし、コードを編集するときには、マクロを壊す可能性があるので、これはいい考えではありません(Nereの答えにはjeleraの注釈があります)。

" move on soft lines in insert mode 
inoremap <Down> <C-o>g<Down> 
inoremap <Up> <C-o>g<Up> 

(:私の妥協点は何か(私はナビゲーションキーを使用して挿入モードで使用するすべてのマクロを認識していないよ)のためにのみ挿入してたときに、それを有効にする(および置換)にモードではなく、 this answerから適合)