如果不進入插入模式,是否可以插入光標在Vim中的換行符?下面是一個例子([x]
意味着光標在x
):如何在Vim中插入光標而不進入插入模式的換行符?
if (some_condition) {[ ]return; }
偶爾,我可能要輸入一些更多的代碼。所以我按我進入插入模式,按輸入插入換行符,然後刪除額外的空間。接下來,我將進入正常模式,並將光標放在右大括號之前,然後執行相同的操作,以便在自己的行上進行操作。
我一直在做這一段時間,但肯定有更好的方法來做到這一點?
如果不進入插入模式,是否可以插入光標在Vim中的換行符?下面是一個例子([x]
意味着光標在x
):如何在Vim中插入光標而不進入插入模式的換行符?
if (some_condition) {[ ]return; }
偶爾,我可能要輸入一些更多的代碼。所以我按我進入插入模式,按輸入插入換行符,然後刪除額外的空間。接下來,我將進入正常模式,並將光標放在右大括號之前,然後執行相同的操作,以便在自己的行上進行操作。
我一直在做這一段時間,但肯定有更好的方法來做到這一點?
對於您給出的示例,可以使用r輸入用Enter替換單個字符(空格)。然後,fspace。前進到下一個空格並重覆上一個命令。
根據您的autoindent設置,上面可能會或可能不會正確縮進return語句。如果沒有,則使用小號輸入標籤Esc鍵,而不是更換一個新行的空間,縮進線,並退出插入模式。你將不得不用另一個命令替換第二個空格,所以你不能使用'。'。在這種情況下。
我認爲這是最簡單的解決方案。感謝Greg。 – 2008-10-26 16:44:10
'f [空格]'應該等同於'W'(即移動到下一個whitepsace) – 2008-10-30 22:08:16
'W'移動一個字符得太遠,它移動到下一個空格之後的下一個字符*。 – 2009-09-23 22:22:35
這裏是如何創建一個在光標插入新行的宏,只要你按下而不插入模式「G」:
從VIM內,類型:
:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
其中:
你會看到在你的vim窗口的底部以下,直到你按下回車決賽:
:map g i^M^[
說明:
一個[Ctrl + V]表示「引述FOL降低字符「 - 它允許您在命令中嵌入換行符和轉義字符。
所以你映射的「G」鍵序列:
i [Enter] [Escape]
這是VIM對於光標,然後退出插入模式前插入一個換行符。
調整菜譜方案:
f}i^M^[O
- 這將˚F IND的}和我 nsert另一個新行,然後在插入模式和Ø筆空行逃脫您輸入更多的代碼。享受!
如果你在兩行中打斷一行,而autoindent
(或任何其他縮進輔助)被啓用,Vim將自動殺死光標右側的任何空格。
如果你不希望使用任何這些設置,使用s
代替i
以小號 ubstitute新文本的空白,而不是僅僅插入。 (如果有多個空格,請將光標置於最左側,並使用cw
代替。)
此映射將打破您擁有的任何單行功能。簡單地說你的光標就行了,在正常模式下點擊「g」:
:map g ^f{malr<CR>`a%hr<CR>`a
這裏假設你有左大括號後面輸入一個空格和結束括號之前的空間。看看是否適合你。
如果您通常將一行塊擴展爲三行,請嘗試替換。將開口支架更換爲支架/返回,並將關閉支架更換爲返回/支架。
用於替代支架支架/返回命令如下:
:s/{/{\r/
既然你要經常使用這個,你可以全序列映射到一個未使用的按鍵是這樣的:
:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M
如果您看到^M序列中,類型[按Ctrl-V],然後按進入。
現在隨着你的光標在你的採樣線上的任何地方,按下映射鍵,並添加回車符。
查詢:help map-which-keys
以獲取關於選擇未使用的擊鍵進行映射的建議。
的簡單映射按下Ctrl + Enter鍵打破在光標的行:
:nmap <c-cr> i<cr><Esc>
基本上進入「插入」模式,插入換行符,並返回到正常模式。
將它放在.vimrc文件中供將來使用。
設置在vimrc此鍵映射
:map <C-m> i<CR><Esc>h
,如果你想在你的vim更好地使用它,然後按Ctrl + M。
恕我直言,內置映射gs
是不是一個有用的映射(把VIM睡覺),人們可以用這個分裂:
nmap gs i<CR><ESC>
在Vrapper您可以使用GQL將分割線無進入插入模式,但可能無法始終保持縮進。
基本上,當你拆分一條線時,你要麼只是插入一個回車符,要麼就是你在一個空間的情況下,用一個回車代替它。那麼,爲什麼要解決這個問題呢?這裏是我對K的映射:
"Have K split lines the way J joins lines
nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>"
我使用三元運算符將兩個操作壓縮到一個鍵映射中。打破它,<expr>
意味着鍵映射的輸出可以動態的,在這種情況下,取決於條件getline('.')[col('.')-1]==' '
,這是詢問vim如果光標下的字符是空格的冗長方式。最後,熟悉的三元運算符? :
要麼替換換行符(r<CR>
)的空間或插入一個新的(i<CR><Esc>
)
現在你有一個可愛的妹妹鍵映射到J
命令。
假設你可以將K
映射到別的東西(選擇你喜歡的其他鍵),並使用標記'
作爲臨時標記,那麼爲什麼不這樣做呢?
:nmap K m'a<CR><Esc>`'
現在在正常模式下按下K後,您希望換行符發生後的字符將分割線並將光標保留在原來的位置。
事實上,你需要以下組合操作:
:
在命令模式s/\s/\r/g
如果你輸入:
aaa bbb ccc ddd
,並希望輸出
aaa
bbb
ccc
ddd
您可以使用命令
f r<ENTER>;.;.
要插入一些沒有進入插入模式? – 2008-10-26 05:59:21
@ jeremy-cantrell是的,就像「J」一樣加入下一行並插入一個空格而不進入INSERT模式! – awendt 2011-05-09 15:32:33