Vim自动换行

3xiyfsfu  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(148)

当我在Vim中编写一长行文本时(例如在latex中的一个段落),它会将我的文本 Package 成多行,这很好。然而,如果我尝试用“j”和“k”(或向上/向下箭头)导航这些行,它将跳过整个段落。我通过突出显示段落并按gq解决了这个问题。这将在每行的末尾插入换行符。
我的问题是,有没有一种方法可以自动化,这样我就不必一直高亮显示文本并按gq

n6lpvg4x

n6lpvg4x1#

您可以使用textwidth选项限制线条的宽度(请参见:help tw)。
例如,如果要将宽度限制为80列,可以使用:用途:

:set tw=80

使用此选项,当您键入的内容超过80列时,Vim将自动插入一个换行符。

oo7oh9g9

oo7oh9g92#

你需要后退一点,使用gjgk,它们在 Package 行中向下和向上。
由于gjgkjk在非换行行中的工作方式完全相同,因此您可以安全地将j<down>Map到gj,并将k<up>Map到gk,从而使其无缝连接。

  • 编辑--
    是的,它没有解决埃迪的直接问题,但它解决了他原来的问题(垂直移动 Package 线),导致他的一个穷人的变通办法,反过来,把他在这种情况下。
svgewumm

svgewumm3#

这些是我使用的Map。他们处理我到目前为止遇到的所有案件。

" Modify the up/down keys so that they move per virtual (rather than
" physical) line if a line is displayed wrapped and no count for the
" command has been specified. Always use logical line steps for quickfix
nnoremap <expr> k ((v:count) ? 'k' : ((&buftype == 'quickfix') ? 'k' : 'gk'))
nnoremap <expr> j ((v:count) ? 'j' : ((&buftype == 'quickfix') ? 'j' : 'gj'))
nnoremap <expr> <Up> ((v:count) ? 'k' : ((&buftype == 'quickfix') ? 'k' : 'gk'))
nnoremap <expr> <Down> ((v:count) ? 'j' : ((&buftype == 'quickfix') ? 'j' : 'gj'))
xnoremap k gk
xnoremap j gj
vnoremap <Up> gk
vnoremap <Down> gj

" Move to start and end of virtual line (this will default to normal behaviour
" if the line isn't wrapped)
nnoremap 0 g0
nnoremap <Home> g0
nnoremap ^ g^
nnoremap $ g$
nnoremap <End> g$

" These mappings need to deal with virtual line numbers in 'insert' mode,
" but they need to do it without messing up normal 'completion menu' operation
inoremap <expr> <Up> pumvisible() ? "\<Up>" : "\<C-o>gk"
inoremap <expr> <Down> pumvisible() ? "\<Down>" : "\<C-o>gj"

相关问题