2011-01-05 2 views
3

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

+5

Это может быть из линии, но у меня есть странное ощущение [это] (http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers/103590#103590) ответ применяется здесь. –

+0

Да, я думаю, вы правы. Я пытаюсь сделать vim в своем предыдущем редакторе, и на самом деле мне было бы лучше попытаться покончить с вкладками. –

ответ

3

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

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*

  • Это не принимает разделения окна во внимание.

Смежные вопросы