我经常在视觉模式下使用 Shift + J 将连接几条选定的线条合并成一条线,原始线条用空格分隔。但是我想知道是否有相反的快捷方式,它会将分割选定的单词分成不同的行(每行一个单词)。
我当然能做到:
:'<,'>s/ /^M/g
但是在按键方面更简洁的东西会非常有用。还有其他人找到了办法吗?
提前致谢,
-AJ
答案 0 :(得分:4)
如果您经常在〜/ .vimrc文件或类似的
中使用它,请将其映射vnoremap \ll :'<,'>s/ /^M/g<cr>
nnoremap \ll :s/ /^M/g<cr>
如果您只想多次使用它现在可以使用&amp;命令重复上次搜索
Theres也是gqq,但那是文本宽度,例如80个字符
答案 1 :(得分:3)
最近我偶然发现了同样的问题。我的解决方案是以下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 自动完成我觉得没必要)。另请注意,通过添加“split”也可以使用的附加参数,您可以使用一个函数来分割特定模式(而不仅仅是空格)。
答案 2 :(得分:1)
我在我的配置中使用它来取消加入/拆分当前行的最后一个字:
nnoremap <C-J> g_F<Space><Space>i<CR><Esc>k
它将CTRL-j映射到Join的反面,我把它想象为Counter-Join :)我主要使用它来转换K&amp; R样式与...另一种花括号放置。
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