我经常使用移 + Ĵ在视觉模式下加入几个选择的线与由空格分隔原线一条线。但我想知道是否有一个相反的快捷方式,它将拆分选定的单词分成不同的行(每行一个字)。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