2010-09-09 83 views
28

當我在Vim中切換到命令模式時,光標似乎將一個字符移回到一個單詞的末尾或一個單詞上,並且當我到達行尾時用$ ,它不會到達實際的行尾,而是在最後一個單詞結束之前的一個字符,並且l(「el」)不會將其向前移動,我必須使用箭頭鍵才能到達那裏。當進入插入模式時光標定位

我還沒有找到這種行爲的文件,但這對我來說似乎很奇怪。這背後的理由是什麼(爲了我自己的好奇心),我怎樣才能解決它(或處理它)?

+1

謝謝!很有幫助。 – hatmatrix 2010-09-09 12:34:13

回答

50

如果使用光標更改的gvim,它會更清晰一些。

gvim中的插入模式將光標作爲工字形,因爲您輸入的下一個字母將在|後插入。正常模式有塊光標,因爲你鍵入的下一個東西可能只是影響當前突出顯示的字母(如使用x,s等)。所以插入模式實際上是添加文本,但正常模式正在以某種方式修改文本。

所以在普通模式下,跳到行尾確實意味着最後一個字符,因爲這是最後一個可以修改的東西。在插入模式下,光標會通過最後一個字符,因爲之後可能會添加內容。

有一點要記住的是,你可以控制你對正常模式要插入模式



比方說,你有T [H]是結束該塊的一面朝上文本

([]意味着塊光標位於使得h)



比方說,你有T |他的文字

,如果你在這一點上我按下,光標會看起來像這樣(在gvim的) (|是插入模式光標)



比方說,你有個|是文本

如果你按下,而不是我一個,它看起來像這樣



要記住的另一件事(如pavanlimo提到),從正常模式,你可以去ins使用光標在行的第一個字符之前,或在最後一個字符之後,使用shift-I或shift-A。

+1

非常豐富。謝謝 – hatmatrix 2010-09-09 12:35:17

+1

很高興有幫助:) – 2010-09-09 12:40:29

+14

按鍵'a'是我一直渴望的太久。謝謝你,馬特。 – AshleyS 2012-04-11 12:55:13

16

我不能肯定它背後的原因,但你可以通過按解決它:

Shift + a 
+0

這是有效的,原因是'A'。你可以閱讀更多[那裏](http://bullium.com/support/vim.html) – 2017-03-11 08:42:03

5

這是實現依賴於光標是否能超越行尾移動(至少它是我的編輯器的VIM仿真模式中的一個選項)。您可以按a進入插入模式,並在此情況下的當前字符之後開始編輯(而不是i)。

7

這是因爲您使用的所有命令都會影響光標所在的字母如果在實際字母后面按x(刪除1個字母)沒有意義。

實際上,如果您想要將實際上不需要在最後一個字母后面的命令模式中移動光標,追加你可以按a它把光標放在後面的字母插入模式。

10

你可能會感興趣的選項virtualedit和以下值:

set virtualedit=onemore 

使用此選項,您可以在該行的端移動光標一個字符,然後按插入最後一個字符後面的模式。

這樣解決了這個問題,但是我個人覺得這種行爲有點奇怪。只有在少數情況下,你會遇到的問題,所以它可能是值得忽略它;-)

1

我都建議

:set virtualedit=onemore 
:inoremap <Esc> <Esc>`^ 
+0

爲什麼你建議改變我的命令(進入編輯模式)? – 2016-08-13 16:44:54

+0

防止光標左移一個字符。 – Alexey 2016-08-13 17:46:33