2011-08-15 9 views
8

私は頻繁にVimセッションでいくつかのバッファを開いています。これは、私のジャムプラストがいくつかのバッファからの場所を格納していることを意味します。しかし、Ctrl-oを使用して前の場所にジャンプすると、バッファを残したくなく、現在のバッファの「ローカル」位置にジャンプしたいことがよくあります。これはどうすればいいですか?Vim:現在のバッファからの飛び出しを防ぐには?

例:私は、私はCtrlキーを押しながらOキーを押す初めてaaa.mファイルの行15にジャンプしたい

4 10 1 ~/aaa.m 
3 20 1 ~/aaa.m 
2 12 2 ~/xxx.m 
1 15 1 ~/aaa.m 

:私のジャンプリストには、次のように見える場合。重要なのは、次にCtrl + oを押すと、xxx.mファイルにジャンプしたくないということです。むしろ、私はファイルaaa.mの20行目にジャンプしたい。つまり、「現在の」バッファ内の以前の場所です。 Vimのデフォルトの動作は、xxx.mファイルの12行目に移動します。どのように私はこれを達成するための任意のアイデアですか?

+0

これは、スーパーユーザーにとってはより良い質問かもしれませんが、stackoverflowの質問(および回答)は直接コーディングに関連しがちです。 superuser.comは同じ人によって運営されていますが、ソフトウェアの使用に重点を置いています。 –

+4

@David Waters、no。 http://meta.stackexchange.com/q/25925/160504 – sidyll

+2

ニーズに合わせて 'チェンジリスト 'を使用しますか? 'g;'と 'g 'を使って変更リストを前後に移動することができます。 –

答えて

9

次のジャンプリストトラバース機能を試してください。それは(私はそのbackforw 引数が持っているどの値に応じて、+ はCtrl + Oまたは Ctrlキーを使用して)他に 1のジャンプリストの場所から順に段階的に説明し、現在の場所がである場合に停止しますそれが開始したバッファである と同じバッファ。バッファに関連するジャンプリスト の位置を見つけることができない場合、機能は開始前に ジャンプリストにある位置に戻ります。カレントバッファに ロック-replacement

function! JumpInFile(back, forw) 
    let [n, i] = [bufnr('%'), 1] 
    let p = [n] + getpos('.')[1:] 
    sil! exe 'norm!1' . a:forw 
    while 1 
     let p1 = [bufnr('%')] + getpos('.')[1:] 
     if n == p1[0] | break | endif 
     if p == p1 
      sil! exe 'norm!' . (i-1) . a:back 
      break 
     endif 
     let [p, i] = [p1, i+1] 
     sil! exe 'norm!1' . a:forw 
    endwhile 
endfunction 

Ctrlキー + としてこの機能を使用するO/Ctrlキー + Iは、それは下記のようにマッピングを作成します。

nnoremap <silent> <c-k> :call JumpInFile("\<c-i>", "\<c-o>")<cr> 
nnoremap <silent> <c-j> :call JumpInFile("\<c-o>", "\<c-i>")<cr> 
+0

eeck。それは病気です。狡猾である。ストリームへの泳ぎのポイントを与える – sehe

+0

そのコードを書くことに感謝、本当に面白い解決策。それはいくつかの笑い声で動作します。まず、ディレクトリが私のジャンプリストにある場合(これは、ファイルを開くためにディレクトリを閲覧したためである可能性があります)、現在のバッファにnetrwブラウザを開き、そこでスタックされます。第2に、関数がジャンプリストの最後に到達すると、最後の2つの場所( 'Ctrl + k 'が押されたとき)の間でジャンプし続けます。ジャンプリストをループするか、最後の場所に留まることは可能でしょうか? – vimgm

+0

@sehe:これは私にとっても穀物に対して感じます。 (そして、個人的には、デフォルトのジャンプリストの動作のコーナーをカットしようとはしませんでした。)しかし、この問題を解決する方法を見つけようとするのは面白い(そしてちょっとハッキリです)。 –

0

多分EnhancedJumps pluginが役立ちます。

このプラグインをインストールすると、別のバッファへのジャンプは、同じジャンプコマンドがすぐ後で繰り返された場合にのみ実行されます。

関連する問題