2015-06-27 66 views
4

當我在正常模式下是,光標的作品如我所料 - 考慮以下情況:光標不返回到水平位置在vim

Initial

如果我按下4倍,將光標移動到這個位置:

Expected

然而,當我在插入模式一樣的東西,將光標放到那裏:

Unexpected

現在的問題是:這種行爲是否正確?如果是的話,背後的原因是什麼,如何改變它(如果可能的話)?

我的短的.vimrc:

set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set smartindent 
set mouse=a 
set number 
set ai 
set nowrap 
set viminfo='100,<5000,s1000 
+4

Vim中有一個錯誤影響了這個。它幾個月前在Vim 7.4.659中修復。 –

+0

@SatoKatsura對於我來說,它不適用於7.4.769和7.4.827。我回到了7.4.273,現在一切都很好。 – martinkunev

+1

@martinkunev然後你有一個選擇:繼續使用7.4.273,永遠快樂地使用它,或者將問題報告給'vim_dev'。 –

回答

2

這個問題一直現在讓我感到憤怒了一會兒,今天我發現這個問題,回答了關於同一主題:

https://vi.stackexchange.com/questions/3021/vim-forgets-cursor-column-when-i-move-over-a-line-that-ends-with-a-brace-in-inse

答案不完全精確(在運行時,它精確地產生了vim中的錯誤),但是我設法修改它以正確工作。下面是改變我做:

在負責高亮匹配的括號,/usr/share/vim/vim74/plugin/matchparen.vim,在90-100行文件中,有下面一段代碼:

let has_getcurpos = exists("*getcurpos") 
if has_getcurpos 
    " getcurpos() is more efficient but doesn't exist before 7.4.313. 
    let save_cursor = getcurpos() 
else 
    let save_cursor = winsaveview() 
endif 

問題在於getcurpos()功能 - 由於某種原因,它似乎不能正常工作。因此,我在該代碼的第一行之後添加了覆蓋:

let has_getcurpos = 0 

這可以解決問題。

+0

你能從這裏開始重現最新vim的問題:'vim -u NONE -N'?請張貼顯示此行爲的確切步驟,以便它可以修復。 –

+0

在開始時,鍵入命令:':so /usr/share/vim/vim74/plugin/matchparen.vim '來加載插件(它在Ubuntu中默認爲開啓,但使用-u NONE禁用它)。然後在插入模式下輸入:'aaaa {} aaaa',然後在不退出插入模式的情況下,按向上箭頭兩次。遊標將在第一行,第二列,而預期的結果將是第一行,第五列。我使用的是Ubuntu存儲庫中的任何版本,7.4.712。 – akrasuski1

+0

謝謝。現在可以重現。將嘗試修復它。 –