答案1
j
光标向下移动一个物理线路。您可以使用gj
向下移动一个显示行。
答案2
现有的答案是正确的。
我想补充一点,当您处理非换行文本时,j
/k
和gj
/是严格等效的。因此,以下映射既无害(如果您不这样做),又有用(如果您):gk
:set wrap
:set wrap
nnoremap j gj
nnoremap k gk
答案3
我喜欢这里的脚本:
http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping
“映射以使移动在换行模式下在 1 个屏幕行上运行
函数!ScreenMovement(movement)
if &wrap && b:gmove == 'yes'
返回 "g" 。 a:movement
else
return a:movement
endif
endfunction
onoremap j ScreenMovement("j")
onoremap k ScreenMovement("k")
onoremap 0 ScreenMovement("0")
onoremap ^ ScreenMovement("^")
onoremap $ ScreenMovement("$")
nnoremap j ScreenMovement("j")
nnoremap k ScreenMovement("k")
nnoremap 0 ScreenMovement("0")
nnoremap ^ ScreenMovement("^")
nnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
vnoremap k ScreenMovement("k")
vnoremap 0 ScreenMovement("0")
vnoremap ^ ScreenMovement("^")
vnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
" 切换 showbreak
功能! TYShowBreak()
if &showbreak == ''
set showbreak=>
否则
设置 showbreak=
endif
endfunction
let b:gmove = "yes"
function!TYToggleBreakMove()
if exist("b:gmove") && b:gmove == "yes"
let b:gmove = "no"
else
let b:gmove = "yes"
endif
endfunction
nmap,b TYShowBreak()
nmap,bb TYToggleBreakMove()
然后,您可以使用 ,b 来显示行是否换行(上面的示例使用 '>' 字符)。然后,如果您设置了换行,则 ,bb 将关闭屏幕移动
此外,我还在 VIMRC 中将包装设置为绑定:
"--- wrap toggle with f2 key---"
function! ToggleWrap()
set wrap!|set wrap?
endfunction
"F2 toggles wrap
nmap <f2> :call ToggleWrap()<CR>
vmap <F2> <C-C>:call ToggleWrap()<CR>
imap <F2> <C-O>:call ToggleWrap()<CR>i
答案4
如果您输入 gj,光标将向下移动一行,而输入 gk 则将光标向上移动一行。我假设您处于普通控制台窗口中?
干杯