2012-03-15 122 views
12

如果某些行太長,則會被強制更新。如何直觀地將光標移動到vim中?(不按行)

例如,通常長行會看起來像這樣

1 first line 
2 this is the long second line of the file 
3 third line. 

但是,如果一個Vim的窗口太窄,它會看起來像這樣

1 first line 
2 this is the long 
    second line of the file 
3 third line 

問題從出現這個。我們假設vim光標位於'第三行'的't'之前。如果我輸入「k」,光標將移動到「文件第二行」的「s」之前。在此之後,如果我再次輸入「k」,光標將移動到'第一行'中的'f',而不是'這是很長'的't'。我想要的是光標移動到「這是很長」的't',這對我來說是更直觀的過程。我怎麼能設置我的vim這樣工作?

+2

「當前」的行爲你描述是很不尋常的;我試圖弄清楚vim如何能夠做到這一點。爲了確認,你當前的行爲是,從第3行的「t」之前的光標開始,如果你按下「k」一次,它會在第2行的「s」之前上升一個屏幕行,但如果按下它又是如何,它在第1行的「f」之前上升了兩個屏幕線? – 2012-03-15 12:59:30

回答

22

在Vim中,所述gjgk命令移動通過線屏幕上,而不是通過在文件線。這聽起來像它可能符合你的描述。

您可以修改你的鑰匙是這樣的:

:map j gj 
:map k gk 
+6

請注意,您可能要考慮使用':noremap'或':nnoremap'來代替;請參閱此處瞭解更多信息:http://learnvimscriptthehardway.stevelosh.com/chapters/05.html – 2014-06-03 00:53:24

3

沒有,如果有的線路太長,你有集換他們將在「兩線」來表示,這麼說,但他們之間不會有換行符。如果您關閉包裝設置nowrap你會看到效果。

通常情況下,kj上下移動。如果您想要導航包裝線,請使用gkgj,或者像其他人一樣,將其映射到例如光標鍵。

nmap <up> gk 
nmap <down> gj 
2

在Vim中移動在自然方式是可能的。

我做什麼,我建議你,要修改(或創建)你的「〜/ .vimrc」和添加以下兩行:

map <C-Up> g<Up> 
map <C-Down> g<Down> 

這將映射你控制行動和控制 - 下到運動命令(這是相干控制權和控制左走動排長)

如果添加這些其他兩行,你可以使用相同的命令插入模式移動:

imap <C-Up> <C-[> g<Up> i 
imap <C-Down> <C-[> g<Down> i 

(VIM是偉大的!)

格雷格若

+0

這會產生與將'i'一樣移動到一條線上的不利影響。使用[Ctrl-O](http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings) – Pod 2016-11-14 15:00:13

0

這個答案是從@mario-rossi 's answer(工藤他)衍生出來的,輕微midification。

我使用普通的向上和向下箭頭鍵,而不是CTRL +向上和CTRL +向下。不知何故,我需要刪除插入模式映射中的一個多餘的空間,以避免一個錯誤的行爲。

把下面的內容~/.vimrc

" When a long line is wrapped, the "gk" and "gj" allow you to move up and down 
" a visual line, while normal "k" and "j" move a physical line. 
" The following settings map "gk" and "gj" to cursor <up> and <down>. 
map <up> gk 
map <down> gj 
" And the following lines enables same <up> and <down> behavior in INSERT mode 
imap <up> <C-[> <up>i 
imap <down> <C-[> <down>i 
相關問題