2012-06-12 81 views
7

目前,我正在嘗試學習VIM並禁用所有模式的箭頭鍵。當輸入新的功能時,我總是用同時打開和關閉括號以便不會忘記它們。既然,我不能回去(沒有箭頭鍵),我想知道它是如何在VIM中完成的,因爲一旦關閉,你就不在括號內。如何跳入VIM中的括號

標準做法是退出插入模式,移入圓括號並再次進入插入模式?或者,您是否簡單地將括號保留開放直至完成?

我知道AutoClose腳本。這個問題更有助於理解VIM的做事方式,所以我想知道其他開發人員是如何克服這個問題的。

+2

你說的是'%'還是'f)'? –

+0

不,我其實是指一旦關閉後我如何回到支架(); //光標現在在這裏。在其他編輯器中,您只需使用箭頭鍵,但我禁用了我的習慣以適應VIM模式。 – ddillert

+1

在使用vim幾天之後,您甚至不會注意到進入和退出模式。 vim的重點是讓你做任何操作文本的第二天性。它不會需要很長時間,年輕的絕地。 – jahroy

回答

5

忘記一個右括號會導致後面突出顯示的問題,使您不可能進一步忽略它們。

我建議你在輸入參數的同時在括號中間輸入參數,並在完成參數後關閉參數。 (如果你正在努力學習vim,無論如何,這個變化看起來並不是太大,無法適應 - 你必須適應的其他東西的數量已經相當驚人了。)

2

背後的想法Vim的模態本質是,你花大部分時間在正常模式下,而不是在插入模式下。當你想插入文本,並且只要你想做一些不插入原始文本的東西時,你只能進入插入模式 - 你將回到正常模式。

無論如何,如果由於某種原因您不想離開插入模式,您可以按CTRL+o運行一個正常模式命令。但我建議習慣跳轉模式 - 切換模式應該是Vim用戶的第二個特性。

2

問題:標準慣例是退出插入模式,移入括號並再次進入插入模式?或者,您是否簡單地將括號保留開放直至完成?

答案:只需鍵入函數參數,然後鍵入右括號即可。但是,是的,如果您已經輸入了),然後您決定要返回一個角色,那麼您可能只需點擊退出鍵,然後在當前位置之前插入i即可。這僅僅是兩次擊鍵,並且有經驗的vi用戶很習慣擊中Escape鍵。

如果您實際輸入了);,則需要點擊退出鍵,然後點擊hi。如果你做了很多,你會習慣它。

鍵的某些組合成爲第二性質。例如,可以通過點擊x來轉換vi中的兩個字符,刪除光標下的字符並使光標位於下一個字符上;然後p,將該字符粘貼到光標位置後面。我已經在我的生活中輸入了足夠多的時間,我甚至都沒有想過......我的手指只知道那些鑰匙在哪裏。我只是想:「哦,我需要交換這些角色」,我的手指猛擊了xp

+0

同意...在使用vim幾天之後,OP甚至不會考慮這些事情。 vi的全部意義在於你操縱文本的一切都變成了第二天性。 – jahroy

1

首先,在命令模式下,%將您移到相應的括號,括號或括號中。

要回答你的問題:是的,誰立即關閉他們的parens,括號,括號等......最有可能退出命令模式,然後重新進入插入模式返回編輯。

對我而言,這甚至不是我注意到的東西。你很快就會和你一樣。

每當我開始一個新的if語句,我立即打開並關閉大括號。之後,我添加右括號,我打ESCØ打開上面我的右大括號的行(或ESCķ)。然後我再次開始輸入。

這不會給我帶來任何不便或問題。所有這些對你來說都將是第二天性的......

你甚至不會考慮那些箭頭鍵更長的時間......你只會使用h回去(或更好的東西) 。

0

不要需要停止使用箭頭鍵。這是一個愚蠢的想法。

hjkl比方向鍵只有「更好」如果您觸摸類型,因爲它位於主頁行。如果你不觸摸類型,你的手已經自然而然地做了很多修飾,並且達到了與其餘的方向鍵一致。如果你不觸摸類型,那麼就沒有回家了。

雖然你的問題並非真的是hjkl vs箭頭問題。你可以通過習慣於只輸入左括號,然後輸入參數,然後輸入右括號或者使用「自動閉鎖」機制來解決這個問題。

您可以通過添加此行到您的~/.vimrc做用簡單的方式:

inoremap (()<C-o>h 

或使用the many plugins available之一。

+0

哈哈,我試過放棄箭頭鍵,因爲這是vim用戶的一般建議,'hjkl'應該是更快的,等等等等等等。有一半時間,當我真正想要'h'時,我發現自己打'j',反之亦然。畢竟哈哈,方向鍵並沒有那麼糟糕。 – verboze

+0

那些堅持放棄'hjkl'箭頭的人要麼是新手重複他們不理解的東西以適應,要麼觸摸打字員忘記他們是非常少數的人。 – romainl

0

一種選擇是使用鍵映射跳轉到左括號/括號。我傾向於立即關閉括號/圓括號以確保它們是平衡的(即使vim會憤怒地讓我知道,如果發生這種情況,我會錯過它們 - 習慣的力量)。在vimrc拋出這樣的映射:

imap <C-S-h> <esc> :call search("[{[(]", "bes")<CR> i

這裏的命令故障:

  • 在編輯模式下的地圖<CTRL-SHIFT-h>
  • <ESC>(要回到正常模式),
  • :call search("[({[]", "bes")<CR>向後搜索一個開括號/括號並跳轉到它,最後
  • i返回插入模式

所以我可以輸入foo();,然後<CTRL-SHIFT-h>跳回括號提供論據。

有點相關:看着vim-surround plugin,一旦你掌握了它,它就是一種生產力的提升!