vim
場所(ファイルへのパス、そのファイルの行番号)をブックマークして、後で簡単にその場所に移動できるようにするコマンドはありますか?
コマンドと似ていNERDTree
:Bookmark
ます。でファイルを開くことができますNERDTreeFromBookmark
。ブックマークがファイルだけでなく、ファイル+行番号であるという違いがある同じ機能を探しています。
ありがとうございました
vim
場所(ファイルへのパス、そのファイルの行番号)をブックマークして、後で簡単にその場所に移動できるようにするコマンドはありますか?
コマンドと似ていNERDTree
:Bookmark
ます。でファイルを開くことができますNERDTreeFromBookmark
。ブックマークがファイルだけでなく、ファイル+行番号であるという違いがある同じ機能を探しています。
ありがとうございました
はい、「マーク」コマンドを使用してこれを行うことができます。作成できるブックマークには、ローカルとグローバルの2種類があります。グローバルブックマークを参照しています。
'mP'と入力して、Pというブックマークを作成できます。大文字の大文字はグローバルブックマークであることを示します。そのブックマークに移動するには、「P」と入力します。
お役に立てれば
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
編集:ソリューションのインターフェイスを少し変更しました。元のバージョンは要点の履歴にあります。
" 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
このスクリプト(数字マーク)を使用しました。しかし、もっと良いものがあるかもしれません。他の答えを待ってください!
これは述べられているようにあなたの問題を解決しませんが、あなたはそれが役立つと思うかもしれません。
MRU.vim-最近使用したファイルプラグイン
入力:MRU
すると、最近使用したファイルの検索可能なリストが表示されます。いずれかでEnterキーを押すと、そこに移動します。