这可能是一个延伸,但有没有机会编写vim
命令脚本,以便第一个(任何?)行始终显示在顶部?第一个(任何)列(由唯一分隔符定义)会不断显示在左侧?
我能做的最好的事情是分割屏幕并最大化底部屏幕,所以像
split %
wincmd w
wincmd _
对于上排是好的,但是当然如果行比屏幕宽,那么它不能很好地工作 - 除非有办法启动一个模式,其中两个窗口的列对齐。
对于持久性列,我不太确定。需要以某种方式获取第一个分隔符(f
命令的列,我认为,但我无法使其工作),vsplit %
和vertical resize
,然后切换,wincmd l
。同样,这只有在整个屏幕上的行数较少时才有效。
两者都比较复杂,但可以使用上述方法。我还会将标题行拆分为角落处的空单元格。就同步而言,标题必须保留行但在列上同步,反之亦然,对于持久列。
有没有办法创建与主窗口同步的持久行+列设置?在此设置中,删除文件名也很有用。
答案 0 :(得分:1)
这是我能做的最好的,感谢@ DoktorOSwaldo上面的评论。 F2和F3在绑定的第一列(根据给定的分隔符)和绑定的第一行之间切换。 F4摧毁了两者:
hi cursorcolumn ctermbg=red
function Title_destroy()
if( winnr() == 1 )
return 0
endif
let oldpos = getpos('.')
wincmd k
wincmd j
hide
call setpos('.',oldpos)
set nocul
set nocuc
endfunction
function Title_bar()
if( winnr() > 1 )
call Title_destroy()
endif
set nowrap
split %
set scb
wincmd j
set scb
wincmd _
set scrollopt=hor
set cuc
endfunction
function Col_bar(delim)
if( winnr() > 1 )
call Title_destroy()
endif
set nowrap
let oldpos = getpos('.')
call setpos('.',[oldpos[0],oldpos[1],0,oldpos[3]])
let width = searchpos(a:delim)[1]+3
call setpos('.',oldpos)
vsplit %
exe 'vertical resize' width
set scb
wincmd l
set scb
set scrollopt=ver
set cul
endfunction
nnoremap <F2> :call Title_bar()<CR>
nnoremap <F3> :call Col_bar(nr2char(getchar()))<CR>
nnoremap <F4> :call Title_destroy()<CR>
我无法找到同时做到这两点的方法,因为scrollopt
是一个全球性的事情。如果有人想出来,请发表评论或回答。也许以某种方式重载窗口滚动以根据滚动方向更改scrollopt
。现在这对于处理大表(对我而言)已经足够了。
升级