如何跳转到vim中不同选项卡内的标记?

如何跳转到vim中不同选项卡内的标记?,vim,keyboard-shortcuts,Vim,Keyboard Shortcuts,我使用的是MacVim,通常会打开一些选项卡。我希望能够在任何打开的文件中留下标记,并在它们之间跳转。当标记在同一个选项卡中时,mK和K非常有效,但我必须使用gt查找选项卡,然后使用K查找标记。。。一定有更好的方法吗?这里有一个快速而肮脏的黑客程序,可以满足您的需要 let s:marks = {} function! s:Mark(name) echomsg "new mark: " a:name " todo: record the winnr/bufnr as well le

我使用的是MacVim,通常会打开一些选项卡。我希望能够在任何打开的文件中留下标记,并在它们之间跳转。当标记在同一个选项卡中时,mK和
K非常有效,但我必须使用gt查找选项卡,然后使用
K查找标记。。。一定有更好的方法吗?

这里有一个快速而肮脏的黑客程序,可以满足您的需要

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>
让s:marks={}
功能!s:马克(姓名)
echomsg“新标记:”a:名称
“todo:同时记录winnr/bufnr
设s:marks[a:name]=tabpagenr()
exe'normal!m'.a:名称
端功能
函数!s:跳转(方式、名称)
如果有_键(s:标记,a:名称)
设nr=s:marks[a:name]
tabfirst
let first=tabpagenr()
而tabpagenr()!=nr
塔布奈特
如果tabpagenr()==第一个
打破
恩迪夫
循环结束
如果tabpagenr()==nr
exe'normal!'。a:如何。a:名称
“名义终止
返回
恩迪夫
恩迪夫
“标签标记”。a:名字。“未设置”
端功能
nnoremap m:调用标记(nr2char(getchar())
nnoremap`:调用跳转('`',nr2char(getchar())
nnoremap':调用跳转(“”,nr2char(getchar())
问题:

  • 每个缓冲区的标记通常不同。在这里,所有的标记都是全球性的。可能是,我们应该提供到
    \m
    \'
    ,ang
    \*backtick*

  • 这不考虑拆分窗口


这可能有点过分,但我有一种有趣的感觉,答案适用于这里。是的,我认为你是对的。我正试图将vim应用到我以前的编辑器中,事实上,我最好不要使用标签。