マークを使用して、最近開いたが変更されていないファイルの場所にジャンプするにはどうすればよいですか?


11

多くの場合、私はファイルを編集します-私の仕事は終わったと思います-それからファイルを閉じて次の作業に進みます。しかし、そのコードに戻り、もう少し調整する必要があることに気付きました。
もう一度ファイルを開く.と、マークを使用して、で最後に編集した位置にジャンプできます'.
現在、vimのマークを使用して、最近アクセスしたが変更されていないファイル内の場所にジャンプする方法を見つけようとしています。
手動でマークを設定できることはわかっていますが、ほとんどの場合、戻ってくることを期待していないため、マークを設定せず、vimが自動的に生成するマークを使用する必要があります。これはから、これを達成するための方法かもしれないようにマークが思えます。
":h motion

" 現在のバッファを最後に終了したときのカーソル位置。デフォルトは最初の行の最初の文字です。| last-position-jump |を参照してください 開いたファイルごとにこれを使用する方法について。各ウィンドウに1つではなく、バッファーごとに1つの位置のみが記憶されます。バッファがウィンドウに表示されている限り、位置は変更されません。{Viにはない}。

しかし私が

  • バッファーを表示しているすべてのウィンドウを閉じます(ただし、バッファーはまだバッファーリストに存在しています)。または:
  • バッファのすべてのインスタンスを殺す

マークが更新されていないようですが、マークを使用してバッファ/ファイルの最後のカーソル位置にジャンプするにはどうすればよいですか?


2
私は、あなたが探していると思うCtrl+oCtrl+i... :h jump-motions詳細は
Sundeep

@spasicは悪い提案ではありませんが、数十回のジャンプを行うと、大規模なジャンプリストでは位置が失われます。マークをバッファにスコープすることで、管理するマーク/場所のリストが少なくなります
the_velour_fog

まだ読んでいないなら、このヒントは面白いと思います。多分あなたはあなたを微調整しなければならないでしょうviminfo
スタトックス

@statoxありがとう。私はそれとvimヘルプのヒントを見ました。これらのソリューションは"、ファイルを開いたときに自動的にマークにジャンプする原因になると思います。手動で最後のカーソル位置だけにジャンプしたかったのです。また、"マークがいつ設定されて更新されるのかを理解できなかったため、"マークを使用できません。
the_velour_fog 2016年

回答:


6

ここに古典的な解決策があります:

`H

最後のHTMLファイルなどにジャンプするには…

augroup VIMRC
  autocmd!

  autocmd BufLeave *.css  normal! mC
  autocmd BufLeave *.html normal! mH
  autocmd BufLeave *.js   normal! mJ
  autocmd BufLeave *.php  normal! mP
augroup END

2
おかげで、これは本当に便利なようです。私はそれを自分のvimrcにロードして試してみました。autocmdに変更しWinLeaveました。気が付いたのBufLeaveは、スプリットを閉じてもバッファーがまだどこかで開いているときは起動しないようです。私は少しエッジケースを知っていますが、WinLeaveより広い範囲の「ファイルを閉じる」タイプの状況で動作するようですが、私はまだテストしています...
the_velour_fog

3

私はうまくいくように見えるこのvimscriptステートメントを書いた

autocmd BufLeave * :normal ml

説明

  • BufLeave 自動コマンド:これは、
    • 別のウィンドウに移動する
    • バッファを表示している最後のウィンドウを閉じたとき
    • あなたがバッファ自体を閉じるとき bd
  • :normal-デフォルトでcommandはautocmd の部分はexコマンドのようです。したがって、通常モードのコマンドを実行するようにvimに指示するには、以下を追加する必要があります。:normal
  • ml-マークを設定しますl(ニーモニック:最後

使用法

最後にバッファにいたときのカーソル位置を呼び出すには、単に

'l

または

`l

0

カーソルでviminfoが認識している最後の位置に戻したい場合は、

autocmd BufReadPost * call setpos(".", getpos("'\""))

romainlの答えは私にとって特に有用であり、私はこれをたくさん使ってきました(私はウェブ開発者なので):

augroup VIMRC
    autocmd!
    autocmd BufLeave,WinLeave *.html normal! mH
    autocmd BufLeave,WinLeave *.css normal! mC
    autocmd BufLeave,WinLeave *.js normal! mJ
augroup end

nnoremap <space>h `Hzz
nnoremap <space>c `Czz
nnoremap <space>j `Jzz

最後の潜在的に有用なものはオプションです:help 'nostartofline

               *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
'startofline' 'sol' boolean (default on)
            global
            {not in Vi}
    When "on" the commands listed below move the cursor to the first
    non-blank of the line.  When off the cursor is kept in the same column
    (if possible).  This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
    CTRL-F, "G", "H", "M", "L", gg, and to the commands "d", "<<" and ">>"
    with a linewise operator, with "%" with a count and to buffer changing
    commands (CTRL-^, :bnext, :bNext, etc.).  Also for an Ex command that
    only has a line number, e.g., ":25" or ":+".
    In case of buffer changing commands the cursor is placed at the column
    where it was the last time the buffer was edited.
    NOTE: This option is set when 'compatible' is set.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.