如果有一个选项可以显示当前行或所有缓冲区的所有列号,那就太好了,这样我就可以知道到底要导航到哪里。有这样的选项还是我必须自己编程(nooo XD)?
:h 'statusline'
这就像准确定义您要看到的打印内容一样简单。例如
" RulerStr() comes from http://www.vanhemert.co.uk/vim/vimacros/ruler2.vim
function! RulerStr()
let columns = &columns
let inc = 0
let str = ""
while (inc < columns)
let inc10 = inc / 10 + 1
let buffer = "."
if (inc10 > 9)
let buffer = ""
endif
let str .= "....+..." . buffer . inc10
let inc += 10
endwhile
let str = strpart(str, 0, columns)
return str
endfunction
let s:saved_stl = {}
function! s:ToggleRuler()
let buf = bufnr('%')
if has_key(s:saved_stl, buf)
let &l:stl = s:saved_stl[buf]
unlet s:saved_stl[buf]
else
let s:saved_stl[buf] = &l:stl
setlocal stl=%{RulerStr()}
endif
endfunction
nnoremap <silent> µ :<c-u>call <sid>ToggleRuler()<cr>
稍微优化的版本(需要 Vim 8.1.1878 的 method 支持)将是:
function! s:precompute_ruler(columns) abort
let nb = a:columns / 10
let res = range(1,nb)->map({_,n -> printf('....+% 5d', n)->tr(' ', '.')})->join('')
return res
endfunction
let s:ruler = s:precompute_ruler(500) " should be more than enough
function! RulerStr2() abort
return s:ruler[:&columns-1]
endfunction
let s:saved_stl = get(s:, 'saved_stl', {})
function! s:ToggleRuler() abort
let buf = bufnr('%')
if has_key(s:saved_stl, buf)
let &l:stl = s:saved_stl[buf]
unlet s:saved_stl[buf]
else
let s:saved_stl[buf] = &l:stl
setlocal stl=%{RulerStr2()}
endif
endfunction
nnoremap <silent> µ :<c-u>call <sid>ToggleRuler()<cr>
您可以使用“设置标尺”。它将在底部显示行号和列位置。