开发者

Vim: Split Words Into Lines?

开发者 https://www.devze.com 2022-12-19 13:27 出处:网络
I frequently use Shift+J in visual mode to join several selected lines into a single line with the original lines separated by spaces.But I am wondering if there is an 开发者_C百科opposite shortcut su

I frequently use Shift+J in visual mode to join several selected lines into a single line with the original lines separated by spaces. But I am wondering if there is an 开发者_C百科opposite shortcut such that it will split selected words into separate lines (one word per line).

Of course I can do:

:'<,'>s/ /^M/g

But something more succinct in terms of keystrokes would be very useful. Has anyone else found a way to do this?

Thanks in advance,

-aj


Map it if you are using it often in your ~/.vimrc file or similar

vnoremap \ll :'<,'>s/ /^M/g<cr>
nnoremap \ll :s/ /^M/g<cr>

if you are only wanting to to it multiple times now you can use & command to repeat last search also

Theres also gqq but thats for textwidth eg 80 chars


Recently I stumbled across the same problem. My solution is the following vim function (put in my .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

This can be used with line ranges, e.g., as follows

:26call SplitToLines()

which would split line number 26. But the code also handles ranges of lines gracefully (that's why the range in the for loop is built in reverse order).

1,10call SplitToLines()

will split lines 1 to 10 into several lines. However, I mostly use this in visual mode, like

'<,'>call SplitToLines()

which splits all lines that are visually marked. Of course you may define some single letter abbreviation for this function call (with auto completion by Tab I do not find it necessary). Also note that by adding an additional argument which would also be used by 'split' you can have a function that does split lines at specific patterns (instead of just white space).


I use this in my config to Un-Join/split the last word on current line:

nnoremap <C-J> g_F<Space><Space>i<CR><Esc>k

It maps CTRL-j to do the opposite of Join, I think of it as Counter-Join :) I mostly use it to convert between K&R style vs ...the other kind of curly brace placement.

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
0

精彩评论

暂无评论...
验证码 换一张
取 消