在Vim中配置可变宽度的制表符间距

7

有时我希望Vim能够读取以制表符格式排版的文件,其中最合理的排版方式意味着制表符宽度不统一。换句话说,我想在以下位置设置制表位:

5、30、50、60、70、80

我该如何在Vim中实现这一点?


有一个名为“可变制表位”的功能在vim中已经被讨论了很长时间。最近几天,它刚刚重新整合到主分支中。我已经进行了一些测试-不得不修补它以避免一些算术错误,但现在它似乎非常稳定。你很快就可能会有好运了。 - Cascabel
2个回答

4
如果您实际上不需要更改制表位并且可以仅插入正确数量的空格,则建议您编写脚本。这是一个快速而简单的版本,可能可以满足您的要求:
let s:tabstops = [0, 5, 30, 50, 60, 70, 80]
fun! Find_next(pos)
  if a:pos > min(s:tabstops) && a:pos < max(s:tabstops) 
    let my_count = 0
    while my_count < len(s:tabstops) - 1
      if a:pos > get(s:tabstops, my_count) && a:pos < get(s:tabstops, my_count+1)
        return get(s:tabstops, my_count+1)
      endif
      let my_count = my_count + 1
    endwhile
    return -1
  endif
  return -1
endfun
fun! Tabbing()
  let pos = col('.')
  let next_stop = Find_next(pos)
  let the_command = "normal i"
  let my_count = 0
  while my_count < next_stop - pos
    let the_command = the_command . " "
    let my_count = my_count + 1
  endwhile
  let the_command = the_command . ""
  execute the_command
endfun
imap <TAB> j<ESC>:call Tabbing()<CR>lxi 

这是一个很棒的函数,虽然它不能重新格式化现有文件(这正是我所需要的),但可以帮助我在运行时格式化自己的文件。 - Magnus

0

目前还没有。没有任何官方版本支持。

不过,如果你愿意在自己的一面投入一点努力,我记得有一个补丁可以实现这样的功能。可以查看vim的补丁页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接