Любимые места в vim - PullRequest
       6

Любимые места в vim

9 голосов
/ 09 ноября 2011

Есть ли в vim команда, которая может пометить место (путь к файлу, номер строки в этом файле), чтобы я мог легко перейти к этому месту позже?

Это будет похоже на команду NERDTree :Bookmark. Вы можете открыть свой файл с помощью NERDTreeFromBookmark. Я ищу ту же функциональность с той разницей, что закладка - это не только файл, но и файл + номер строки.

Спасибо

Ответы [ 5 ]

20 голосов
/ 09 ноября 2011

Да, вы можете сделать это с помощью команды «mark». Вы можете создавать закладки двух типов: локальные и глобальные. Вы имеете в виду глобальную закладку.

Вы можете набрать 'mP', чтобы создать закладку с именем P. Обратите внимание на регистр, верхний регистр указывает, что это глобальная закладка. Чтобы перейти к этой закладке, введите `P.

Надеюсь, это поможет

Источник

6 голосов
/ 17 ноября 2011

Параметр 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 загрузит закладки в окне быстрого исправления, которое мне кажется приятным интерфейсом.

Это решение похоже на решение Эрика - оно использует файл .viminfo, поэтому, если что-то пойдет не так, вы, вероятно, потеряете свои оценки. А если вы сохраните свои отметки в одном экземпляре vim, они не будут сразу доступны в другом.

Я не знаю, насколько вам удобно с vimscript, поэтому на всякий случай - чтобы использовать это, вы можете поместить код в файл в вашем каталоге plugin vimfiles, например plugin/bookmarks.vim. Должно быть вполне достаточно. Вот и весь код в гисте: https://gist.github.com/1371174

EDIT : Немного изменен интерфейс для решения. Оригинальную версию можно найти в истории Gist.

1 голос
/ 06 декабря 2011
" 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
1 голос
/ 16 ноября 2011

Это не решит вашу проблему, как указано, но вы можете найти, что это помогает.

MRU.vim - плагин для недавно использованных файлов

Введите :MRU, и вы получите хороший список для поиска ваших последних использованных файлов. Нажав Enter, вы попадете к нему.

1 голос
/ 09 ноября 2011

Я использовал этот скрипт (числовые метки) .Хотя могут быть и лучшие.Ждите других ответов!

...