2014-01-07 72 views
5

對不起,如果我的問題不是很清楚。我不確定如何對它進行描述。在Vim中移動光標通過長軟包裝線

我想使用VIM爲我所在的一些類編寫論文。我遇到的問題是在編輯器中對線條進行格式化。如果我沒有用enter鍵明確地斷開一行的末尾,當我嘗試在文本中移動光標時,如果我有一個跨越多行的句子,它會跳過多行。有什麼辦法可以讓光標能夠在文本中移動,就像在大多數文字處理器中一樣?

+1

一些更多的信息在這裏除了答案:http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping –

回答

3

您是否嘗試過在vim以下命令行:

:set nowrap 
+0

好,這是做到了。謝謝。 –

+1

我也推薦':設置textwidth = 80'來自動換行。 – Max

+0

該命令似乎沒有做任何事情,但我可以看到爲什麼你會想要這樣的事情。任何想法爲什麼它可能不適合我? –

6

這是因爲默認jk運動跨越物理線路,不可見,軟包屏線移動(當你有:set wrap)。您可以使用gjgk命令。

如果你想默認這種行爲,你可以把這個放入你的~/.vimrc重新映射默認鍵:

noremap j gj 
noremap k gk 
+0

謝謝。我會去做。 –

25

與經常使用

noremap j gj 
noremap k gk 

選項的問題是,如果您的文本中有多行,則它會打破<vcount>的功能。
例如:您需要10k(上行10行),因爲您在側邊欄中使用相對數字,但是這些行中包含4行高度的多行。因此,您最終會從您的相對數字中讀取的6行(6k)以上。你必須手動計算!煩人......特別是如果你有多個多行你的當前位置和你想要的位置之間 - 不是Vim- istic

我喜歡我的<vcount>功能與我的:relativenumber一起,這就是爲什麼我寫了如下功能&映射來解決與此相關的所有問題。
這些功能讓你使用像10j10k命令不如預期,儘管多線存在使用gjgk作爲默認運動映射的所有優點:

編輯: 我只是發現了以下的reddit,這比我自己的解決方案好得多。這是最短的版本:

nnoremap <expr> j v:count ? 'j' : 'gj' 
nnoremap <expr> k v:count ? 'k' : 'gk' 

「龍兒」 的版本更好地理解和完整性:

nnoremap <expr> k (v:count == 0 ? 'gk' : 'k') 
nnoremap <expr> j (v:count == 0 ? 'gj' : 'j') 

來源: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 
+0

有沒有辦法做到這一點水平呢? – f1lt3r