将光标移动到Vim中的长软包裹线

Vic*_*ell 8 vim formatting text

如果我的问题不是很明确,我很抱歉.我不确定如何表达它.

我想使用VIM为我所在的某些类编写论文.我遇到的问题是编辑器中行的格式化.如果我没有使用回车键明确地断开行的结尾,当我尝试将光标移动到文本中时,如果我有一个跨越多行的句子,它会跳过多行.是否有任何方法可以使光标能够在文本中移动,就像在大多数文字处理器中一样?

fre*_*eeo 36

经常使用的问题

noremap j gj  
noremap k gk 
Run Code Online (Sandbox Code Playgroud)

选项是,<vcount>如果文本中包含跨越多行的行,它会破坏功能.
示例:您想要10k(向上10行),因为您在侧边栏中使用相对数字,但是有4行高度的多行.因此,您最终有效地在6k您想要的线上方6行()处,您可以从相对数字中读取.你必须手动计算!烦人...特别是如果你当前位置和你想要的位置之间有多条多线 - 而不是Vimtic!

我喜欢我和我的<vcount>功能:relativenumber,这就是为什么我写了下面的函数和映射来解决与此相关的所有问题.
这些函数允许您使用类似10j10k预期的命令,尽管存在具有使用gjgk作为默认移动映射的所有优点的多行:

编辑: 我刚刚在reddit上找到了以下内容,这比我自己的解决方案要好得多.这是最短的版本:

nnoremap <expr> j v:count ? 'j' : 'gj'
nnoremap <expr> k v:count ? 'k' : 'gk'
Run Code Online (Sandbox Code Playgroud)

"更长"版本,以便更好地理解和完整:

nnoremap <expr> k (v:count == 0 ? 'gk' : 'k')
nnoremap <expr> j (v:count == 0 ? 'gj' : 'j')
Run Code Online (Sandbox Code Playgroud)

来源: http ://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/


我的旧解决方案:

nnoremap <silent> j :<C-U>call Down(v:count)<CR>
vnoremap <silent> j gj

nnoremap <silent> k :<C-U>call Up(v:count)<CR>
vnoremap <silent> k gk

function! Down(vcount)
  if a:vcount == 0
    exe "normal! gj"
  else
    exe "normal! ". a:vcount ."j"
  endif
endfunction

function! Up(vcount)
  if a:vcount == 0
    exe "normal! gk"
  else
    exe "normal! ". a:vcount ."k"
  endif
endfunction
Run Code Online (Sandbox Code Playgroud)


Ing*_*kat 8

这是因为默认jk运动跨物理线移动,而不是可见的,软包裹的屏幕线(当你有:set wrap).您可以使用gjgk命令.

如果您想要默认使用该行为,可以通过将其放入以下内容来重新映射默认密钥~/.vimrc:

noremap j gj
noremap k gk
Run Code Online (Sandbox Code Playgroud)


nik*_*el7 0

您是否在 vim 命令行中尝试过以下操作:

:set nowrap
Run Code Online (Sandbox Code Playgroud)

  • 这只是禁用软换行,问题是专门针对软换行的。 (3认同)