如何在Vim中水平居中打开文件的内容?

olhwl3o2  于 2024-01-08  发布在  其他
关注(0)|答案(6)|浏览(169)

我如何使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


当然,对于textwidthpadding的每一个值。

xpszyzbs

xpszyzbs1#

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

w6mmgewl

w6mmgewl2#

我想你可以使用屏幕来达到这个目的。你可以打开三个不同的窗口,
CTRL+a,CTRL +|
然后转到第二个。

oymdgrw7

oymdgrw73#

有几个插件可以让你获得这种外观,其中大多数似乎是受MacOS Writeroom编辑器的启发。
例如,看看这个VimRoom插件的截图,或者在网上搜索“Vim writeroom插件”。


的数据

bvjveswy

bvjveswy4#

我使用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.

字符串

mepcadol

mepcadol5#

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

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

字符串
建议的选项和Map:

" 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>

4xy9mtcn

4xy9mtcn6#

还有一种方法可以达到类似的效果。你可以设置number列的宽度,在neovim中你也可以设置signcolumn的宽度。下面是代码片段。
在Vim中,你可以使用'numberwidth=[n]'

" set your defaults as you wish
set number
set numberwidth=15
set signcolumn=yes
set relativenumber

" set the default value according to your defaults and matching flag values
" for example in here starting values match with CenterLaout 1 configuration
let s:CenterLayout=1
function! CenterLayoutToggle()
  if s:CenterLayout == 0
    let s:CenterLayout = 1

    " suitable for the long lines
    set numberwidth=15
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg 
  elseif s:CenterLayout == 1
    let s:CenterLayout = 2

    " suitable for no so long lines
    set numberwidth=20
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg
  elseif s:CenterLayout == 2
    let s:CenterLayout = 0

    " bring it back to defaults
    " suitable for long long lines
    set numberwidth=4
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg
  endif
endfunction

nnoremap <silent> <C-c> :call CenterLayoutToggle()<cr>

字符串
在Neovim中,您可以将signcolum=yes:[n]numberwidth=[n]组合在一起做得更好。

" set your defaults as you wish
set number
set numberwidth=15
set signcolumn=yes
set relativenumber

" set the default value according to your defaults and matching flag values
" for example in here starting values match with CenterLaout 1 configuration
let s:CenterLayout=1
function! CenterLayoutToggle()
  if s:CenterLayout == 0
    let s:CenterLayout = 1

    " suitable for the long lines
    set numberwidth=15
    set signcolumn=yes
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg 
  elseif s:CenterLayout == 1
    let s:CenterLayout = 2

    " suitable for no so long lines
    set numberwidth=20
    set signcolumn=yes:9
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg
  elseif s:CenterLayout == 2
    let s:CenterLayout = 0

    " bring it back to defaults
    " suitable for long long lines
    set numberwidth=4
    set signcolumn=yes
    " if you wish to bring the LineNr color back you can reload your color scheme
    hi! LineNr guifg=bg
  endif
endfunction

nnoremap <silent> <C-c> :call CenterLayoutToggle()<cr>


在我看来,set numberwidthset signcolumn的好的副作用是,它会将其应用到当前缓冲区,所以如果你碰巧使用不同宽度的源文件数量,你可以通过按Ctrl+C将其切换到合适的缓冲区配置。
如果你想为所有缓冲区设置它,那么你可以在set numberwidthset signcolumn前面加上bufdobufdo的不太愉快的副作用是,当你切换配置时,它会把你带到最后一个缓冲区。当然,你可以写一个变通方案,在那里你可以存储对当前缓冲区的引用,并在切换后返回到引用的缓冲区,那就太好了
Here is link to the gist.

相关问题