【问题标题】:How do I jump to markers within different tabs in vim?如何跳转到vim中不同选项卡内的标记?
【发布时间】:2011-06-03 23:25:07
【问题描述】:

我使用的是 MacVim,我通常会打开许多​​选项卡。我希望能够在我打开的任何文件中添加标记并在它们之间跳转。 mKK 当标记在同一个选项卡中时效果很好,但我必须使用 gt 找到选项卡,然后使用 K 找到标记......必须有更好的方法吗?

【问题讨论】:

  • 这可能不合时宜,但我有一种有趣的感觉this 答案适用于此处。
  • 是的,我认为你是对的。我正在尝试将 vim 变成我以前的编辑器,实际上我最好尝试取消标签。

标签: vim keyboard-shortcuts


【解决方案1】:

这是一个快速而肮脏的 hack,可以满足您的需求。

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\'、ang \*backtick* 的映射

  • 这不考虑拆分窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2016-08-05
    • 2011-03-18
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多