是否可以配置vim使移動命令「環繞」垂直(或水平)緩衝區?在vim中可以循環滾動嗎?
換句話說,假設我在緩衝區中的第2行,以可視模式。我按3k
。我的光標現在位於緩衝區的最後一行。
或者更簡單地說,我的光標位於文件的第一行 - 我按k
。現在我的光標翻轉到文件的最後一行。
道歉,如果這之前已經問過,但我找不到任何引用搜索「循環滾動」或「環繞滾動」。
是否可以配置vim使移動命令「環繞」垂直(或水平)緩衝區?在vim中可以循環滾動嗎?
換句話說,假設我在緩衝區中的第2行,以可視模式。我按3k
。我的光標現在位於緩衝區的最後一行。
或者更簡單地說,我的光標位於文件的第一行 - 我按k
。現在我的光標翻轉到文件的最後一行。
道歉,如果這之前已經問過,但我找不到任何引用搜索「循環滾動」或「環繞滾動」。
這也許可能有一些Vimscript中兩輪牛車,但它更普遍,成爲高效與像G
運動去一個文件的底部和gg
或1G
或<C-Home>
去文件的頂部。同樣,$
爲行尾,0
爲行首或^
爲第一個非空字符。
您也可以設置:help whichwrap
,它指定哪些鍵在移動到行尾時移動到下一行,或者在移動到行首時移動到上一行。除此之外,我不認爲你所要求的功能是內置的。你可以用一些vimscript來完成它,但它需要重新映射h,j,k和l函數並處理它們是否在行/文件的末尾。對我來說這似乎過分,而且相當混亂。
所有這一切是說,如果你一定要...
nnoremap j :call CheckJ()<cr>
nnoremap k :call CheckK()<cr>
nnoremap h :call CheckH()<cr>
nnoremap l :call CheckL()<cr>
fun! CheckJ()
if line('.') == line('$')
norm! gg
else
norm! j
endif
endfun
fun! CheckK()
if line('.') == 1
norm! G
else
norm! k
endif
endfun
fun! CheckH()
if col('.') == 1
norm! $
else
norm! h
endif
endfun
fun! CheckL()
if col('.') == (col('$') - 1)
norm! 0
else
norm! l
endif
endfun
的Vim是文本編輯器和文本具有一個開始和結束的物理和邏輯性,無論是在列線。因此,您請求的功能不存在,並且可能永遠不會包含在Vim中。
但是,通過將大多數移動命令綁定到自定義實現,它可以在Vimscript中進行模擬。但是這會在使用模式中引入不一致,因爲範圍(例如:42,10
)仍然不會環繞。
爲什麼你想要這樣一個環繞?這是針對某種特定的文件類型,還是您習慣於使用其他編輯器?
+1這是一個更好的答案。似乎你說這與vim的設計不一致,我會購買它。我習慣於vim--這就是我所用的。這個想法的起源是,當用'set relativenumber'編程時,行號似乎完全符合我所描述的內容;也就是說,它們垂直「環繞」緩衝區。如果光標也可以做到這一點,那會很好。 – g33kz0r
我並不熟悉這兩個術語(「通告」或「環繞......」;它們是否來自家庭的emacs一方?),所以您可能會澄清一些關於什麼您感興趣的滾動類型,然後有人可能會提供幫助。 Vim有各種運動手段。到目前爲止,我還沒有發現任何我無法(至少)仿效的東西,如果它不是本地可用的。 – Rook
@Idigas如果你知道vim,那麼我對運動命令的解釋應該很清楚,不要把投機術語放在一邊。 – g33kz0r
可能是[超級用戶](http://superuser.com/) – Michael