Как перейти к маркерам на разных вкладках в vim? - PullRequest
3 голосов
/ 05 января 2011

Я использую MacVim и у меня обычно открыто несколько вкладок.Я хотел бы иметь возможность оставлять отметки в любом из моих открытых файлов и переходить между ними.МК и K work great when the mark is in the same tab but I've got to use gt to find the tab and then К, чтобы найти маркер ... должен быть лучший способ?

1 Ответ

3 голосов
/ 05 января 2011

Вот быстрый и грязный хак, который отвечает вашим потребностям.

let s:marks = {}

function! s:Mark(name)
  echomsg "new mark: " a:name
  " todo: record the winnr/bufnr as well
  let s:marks[a:name] = tabpagenr()
  exe 'normal! m'.a:name
endfunction

function! s:Jump(how, name)
  if has_key(s:marks, a:name)
    let nr = s:marks[a:name]
    tabfirst
    let first = tabpagenr()
    while tabpagenr() != nr
      tabnext
      if tabpagenr() == first
 break
      endif
    endwhile
    if tabpagenr() == nr
      exe 'normal! '.a:how.a:name
      " nominal termination
      return
    endif
  endif
  echoerr "tab-mark " . a:name . " not set"
endfunction

nnoremap m :call <sid>Mark(nr2char(getchar()))<cr>
nnoremap ` :call <sid>Jump('`', nr2char(getchar()))<cr>
nnoremap ' :call <sid>Jump("'", nr2char(getchar()))<cr>

Проблемы:

  • метки для каждого буфера обычно разные.Здесь все оценки являются глобальными.Возможно, вместо этого мы должны предоставить сопоставления \m, \', анг \*backtick*

  • Это не учитывает разделенные окна.

...