23

如何使 vim 水平居中打开文件的文本?

我不想修改文件,只是为了改变 vim 显示它的方式。

更清楚地说,当我打开文件时,我目前遇到这种情况:

|<------ textwidth=80 ------->|<-------------- padding -------------->|
|lorem ipsum dolor sit amet.. 
|dsdsda da dsa dsa 

我想要的是以下内容:

|<--- padding/2 --->|<------ textwidth=80 ------->|<--- padding/2 --->|
|                    lorem ipsum dolor sit amet.. 
|                    dsdsda da dsa dsa 

当然,对于textwidth和的每个值padding

4

5 回答 5

12

Vim 并不是一个单一的、居中的文档编辑器(在编程时,您希望用相关信息填充每个像素),因此只有解决方法:

a)您可以通过展开折叠列来实现更大的左边距。不幸的是,这仅限于 12 个字符单元格:

:let &foldcolumn = (&columns - &textwidth) / 2

b)您可以在左侧创建一个空的填充窗口(也可能在右侧,以实现对称)。

:execute 'topleft' ((&columns - &textwidth) / 2 - 1) . 'vsplit _paddding_' | wincmd p

烦人的窗口拆分可以通过以下方式清除:

:hi VertSplit guifg=bg guibg=NONE gui=NONE
于 2012-10-18T10:58:11.003 回答
4

我认为您可以使用屏幕达到目的。您可以打开三个垂直平铺的不同窗口

CTRL+a , SHIFT+|

然后移动到第二个。

于 2012-10-18T10:44:05.007 回答
4

有几个插件可以让你获得那种外观,它们中的大多数似乎都受到 MacOS 的Writerroom编辑器的启发。

例如,参见VimRoom插件的截图,或者只是在网上搜索“vim writeroom 插件”。

在此处输入图像描述

于 2016-09-04T15:19:50.363 回答
4

出于这个原因,我使用NERDTree 。NERDTree是 vim 的文件浏览器。您可以在启动时以您喜欢的任何宽度加载NERDTree :

在此处输入图像描述

这就是我在启动时运行NERDTree以获取您在图像中看到的内容的方式。我使用vim-plug(vim 的包管理器)来加载NERDTree

# Load NERDTree Plugin via vim-plug
call plug#begin()
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
call plug#end()

let g:NERDTreeWinSize=60  # Set NERDTree width.
NERDTreeToggle            # Open NERDTree at startup.
au VimEnter * wincmd l    # Remove focus from NERDTree window at startup.
于 2016-11-22T01:11:21.070 回答
1

我一直在寻找类似的东西,感谢@ingo-karkat 的回答,我设法创建了一个功能来打开/关闭中心内容。

function! WriteRoomToggle()
  let l:name = '_writeroom_'
  if bufwinnr(l:name) > 0
    wincmd o
  else
    let l:width = (&columns - &textwidth) / 5
    execute 'topleft' l:width . 'vsplit +setlocal\ nobuflisted' l:name | wincmd p
    execute 'botright' l:width . 'vsplit +setlocal\ nobuflisted' l:name | wincmd p
    endif
endfunction

建议的选项和映射:

" hide vertical split separator
hi VertSplit guifg=bg guibg=NONE gui=NONE
" Do not resize windows on close (good if you also use NERDTree)
set noequalalways

" toggle writeroom on/off
map <silent><Leader>v :call WriteRoomToggle()<CR>

" delete buffer without closing the window
command! Bdelete if len(getbufinfo({'buflisted':1})) > 1 | bprev | bdelete# | else | bdelete | endif
noremap <Leader>x :Bdelete<CR>

于 2020-01-28T19:31:04.257 回答