我經常使用移 + Ĵ在視覺模式下加入幾個選擇的線與由空格分隔原線一條線。但我想知道是否有一個相反的快捷方式,它將拆分選定的單詞分成不同的行(每行一個字)。Vim:分詞成行?
我當然可以這樣做:
:'<,'>s/ /^M/g
但東西按鍵方面更加簡潔是非常有用的。有沒有人找到了一種方法來做到這一點?
由於提前,
-AJ
我經常使用移 + Ĵ在視覺模式下加入幾個選擇的線與由空格分隔原線一條線。但我想知道是否有一個相反的快捷方式,它將拆分選定的單詞分成不同的行(每行一個字)。Vim:分詞成行?
我當然可以這樣做:
:'<,'>s/ /^M/g
但東西按鍵方面更加簡潔是非常有用的。有沒有人找到了一種方法來做到這一點?
由於提前,
-AJ
地圖,如果你經常使用它在你的〜/ .vimrc文件或類似
vnoremap \ll :'<,'>s/ /^M/g<cr>
nnoremap \ll :s/ /^M/g<cr>
,如果你只想要它多次現在你可以使用&命令重複上次搜索也
Theres也gqq,但這是爲textwidth例如80個字符
對於視覺選擇的單詞,這可能應該是'vnoremap'。 – 2010-02-10 02:36:25
ahh true我沒有注意到<> – michael 2010-02-10 02:41:04
最近我偶然發現了同樣的問題。我的解決方案是以下VIM功能(把我.vimrc
):這可以用線範圍,例如用於
function SplitToLines() range
for lnum in range(a:lastline, a:firstline, -1)
let words = split(getline(lnum))
execute lnum . "delete"
call append(lnum-1, words)
endfor
endfunction
,如下
:26call SplitToLines()
這將分割行號26。但代碼也可以優雅地處理各種線條(這就是爲什麼for循環中的範圍是以相反順序構建的原因)。
1,10call SplitToLines()
會將第1到10行分成幾行。然而,我主要在視覺模式下使用它,如
'<,'>call SplitToLines()
它將所有視覺標記的行分開。當然你可以爲這個函數調用定義一些單字母縮寫(自動完成Tab我覺得沒有必要)。還要注意,通過添加一個額外的參數,這個參數也可以被'分割'使用,你可以有一個函數在特定模式(而不是僅僅是空白)上分割線。
我在config來取消加入使用當前行/拆分的最後一個字:
nnoremap <C-J> g_F<Space><Space>i<CR><Esc>k
它映射CTRL-J做加入的相反,我認爲它是反加入:)我主要用它來轉換K & R風格vs另一種花括號的位置。
g_ : search for the last non-whitespace on current line
F<Space> : reverse-find first space
<Space> : go one character forward
i : enter insert mode
<CR> : insert a line break
<Esc> : return to normal mode
k : go up one line to where we begun
可能只是它映射到一些快捷方式... – tristan 2010-02-10 02:36:06
如果光標定位在要以一個換行符替換空間,單曲^ M^['。 ':call setline('。',split(getline(')。')))'會將當前行按空格分割並將其分解爲多行。但是,這些都不完全符合你的要求;爲此,我想不出比現在更好的東西,除了可能綁定@michael和@Tristan建議的捷徑。 – ephemient 2010-02-10 02:55:02
相關:'r'是內置2鍵擊方式來插入換行符來代替空白字符。像這樣更復雜的映射等待在[Insertlessly.vim](https://github.com/dahu/Insertlessly)。 –
2013-01-18 13:46:32