10

vim場所(ファイルへのパス、そのファイルの行番号)をブックマークして、後で簡単にその場所に移動できるようにするコマンドはありますか?

コマンドと似ていNERDTree :Bookmarkます。でファイルを開くことができますNERDTreeFromBookmark。ブックマークがファイルだけでなく、ファイル+行番号であるという違いがある同じ機能を探しています。

ありがとうございました

4

5 に答える 5

20

はい、「マーク」コマンドを使用してこれを行うことができます。作成できるブックマークには、ローカルとグローバルの2種類があります。グローバルブックマークを参照しています。

'mP'と入力して、Pというブックマークを作成できます。大文字の大文字はグローバルブックマークであることを示します。そのブックマークに移動するには、「P」と入力します。

お役に立てれば

ソース

于 2011-11-09T10:52:46.833 に答える
6

viminfo設定にはオプションを含めることができます。!これにより、大文字のグローバル変数をviminfoファイルに保存できます。これを使用して、と呼ばれる変数を定義しg:BOOKMARKS、そこにブックマークを保存できます。

これを行うために使用できるvimscriptを次に示します。

set viminfo+=!

if !exists('g:BOOKMARKS')
  let g:BOOKMARKS = {}
endif

" Add the current [filename, cursor position] in g:BOOKMARKS under the given
" name
command! -nargs=1 Bookmark call s:Bookmark(<f-args>)
function! s:Bookmark(name)
  let file   = expand('%:p')
  let cursor = getpos('.')

  if file != ''
    let g:BOOKMARKS[a:name] = [file, cursor]
  else
    echom "No file"
  endif

  wviminfo
endfunction

" Delete the user-chosen bookmark
command! -nargs=1 -complete=custom,s:BookmarkNames DelBookmark call s:DelBookmark(<f-args>)
function! s:DelBookmark(name)
  if !has_key(g:BOOKMARKS, a:name)
    return
  endif

  call remove(g:BOOKMARKS, a:name)
  wviminfo
endfunction

" Go to the user-chosen bookmark
command! -nargs=1 -complete=custom,s:BookmarkNames GotoBookmark call s:GotoBookmark(<f-args>)
function! s:GotoBookmark(name)
  if !has_key(g:BOOKMARKS, a:name)
    return
  endif

  let [filename, cursor] = g:BOOKMARKS[a:name]

  exe 'edit '.filename
  call setpos('.', cursor)
endfunction

" Completion function for choosing bookmarks
function! s:BookmarkNames(A, L, P)
  return join(sort(keys(g:BOOKMARKS)), "\n")
endfunction

コードがどれだけ読みやすいかはわかりませんが、基本的に、Bookmarkコマンドは名前として使用する単一のパラメーターを受け入れます。現在のファイル名とカーソル位置がg:BOOKMARKS辞書に保存されます。GotoBookmarkマーク名の付いたコマンドを使用して移動できます。DelBookmark同じように機能しますが、指定されたマークを削除します。どちらの機能もタブで完了します。

それらをジャンプする別の方法は、次のコマンドを使用することです。

" Open all bookmarks in the quickfix window
command! CopenBookmarks call s:CopenBookmarks()
function! s:CopenBookmarks()
  let choices = []

  for [name, place] in items(g:BOOKMARKS)
    let [filename, cursor] = place

    call add(choices, {
          \ 'text':     name,
          \ 'filename': filename,
          \ 'lnum':     cursor[1],
          \ 'col':      cursor[2]
          \ })
  endfor

  call setqflist(choices)
  copen
endfunction

CopenBookmarksブックマークをクイックフィックスウィンドウにロードします。これは私にとっては素晴らしいインターフェースのようです。

このソリューションはEricのソリューションに似ています。.viminfoファイルを使用するため、問題が発生した場合、おそらくマークを失うことになります。また、あるvimインスタンスにマークを保存した場合、別のインスタンスですぐに利用できるようにはなりません。

あなたがvimscriptにどれほど慣れているかはわかりません。念のため、これを使用するには、pluginたとえば、vimfilesディレクトリの下のファイルにコードを配置できますplugin/bookmarks.vim。完全に十分なはずです。ここに要点のコード全体もあります:https ://gist.github.com/1371174

編集:ソリューションのインターフェイスを少し変更しました。元のバージョンは要点の履歴にあります。

于 2011-11-16T20:04:38.053 に答える
1
" When editing a file, always jump to the last known cursor position.
" And open enough folds to make the cursor is not folded
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
autocmd BufWinEnter *
            \ if line("'\"") <= line("$") |
            \   exe "normal! g`\"" | exe "normal! zv" |
            \ endif
于 2011-12-06T01:38:49.880 に答える
1

このスクリプト(数字マーク)を使用しました。しかし、もっと良いものがあるかもしれません。他の答えを待ってください!

于 2011-11-09T10:50:04.703 に答える
1

これは述べられているようにあなたの問題を解決しませんが、あなたはそれが役立つと思うかもしれません。

MRU.vim-最近使用したファイルプラグイン

入力:MRUすると、最近使用したファイルの検索可能なリストが表示されます。いずれかでEnterキーを押すと、そこに移動します。

于 2011-11-15T22:04:21.020 に答える