我正在尝试在vim中编写一个简单的函数,如果缓冲区有少量行,在特殊按键后,窗口适合整个缓冲区。这就是我的想法
" get total lines of the current buffer
function! <SID>TotalLines()
let n = 0
for line in getline(1,'$')
let n+=1
endfor
return n
endfunction
" resize the window
function! <SID>ResizeCurrentWindow()
if has("gui_running")
let linesNumber = <SID>TotalLines()
if linesNumber < (&lines / 2)
execute ':resize linesNumber'
endif
endif
endfunction
nnoremap <silent> <leader>rs :call <SID>ResizeCurrentWindow()<CR>
好吧,实际上ResizeCurrentWindow()函数不起作用:我获得了一个1行高的窗口。但如果我写
execute 'echo linesNumber'
功能工作并输出正确的结果。有什么建议吗?有最快的解决方案吗? 感谢
答案 0 :(得分:3)
尝试:
execute ':resize ' . linesNumber
linesNumber
是一个变量,在上面的行中替换它的值。 .
是字符串连接运算符,添加字符串':resize'和linesNumber的值以生成要执行的完整命令。
在您的代码中,"linesNumber"
是一个字符串文字,直接作为参数传递给resize
命令。
答案 1 :(得分:2)
我前段时间写了一个函数,我认为你正在寻找的是什么:
fu! AutoResizeWindow(vert) "{{{
if a:vert
let longest = max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
exec "vertical resize " . (longest+4)
else
exec 'resize ' . line('$')
1
endif
endfu "}}}
我使用这些映射来调用它:
:nmap <silent> <leader>wr :call AutoResizeWindow(1)<cr>
:nmap <silent> <leader>wR :call AutoResizeWindow(0)<cr>
对我而言:,wr
垂直调整大小,,wR
水平调整大小。
希望这有帮助。