Vim: разбить слова на строки? - PullRequest
       18

Vim: разбить слова на строки?

9 голосов
/ 10 февраля 2010

Я часто использую Shift + J в визуальном режиме для объединения нескольких выбранных строк в одну строку с исходными строками, разделенными пробелами. Но мне интересно, существует ли противоположный ярлык, такой, что он будет разбивать выбранные слова на отдельные строки (по одному слову в строке).

Конечно, я могу сделать:

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

Но что-то более лаконичное с точки зрения нажатия клавиш было бы очень полезно. Кто-нибудь еще нашел способ сделать это?

Заранее спасибо,

Ответы [ 3 ]

4 голосов
/ 10 февраля 2010

Отобразите его, если вы часто используете его в файле ~ / .vimrc или аналогичном

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

если вы хотите сделать это только несколько раз, теперь вы можете использовать команду &, чтобы повторить последний поиск

Theres также GQQ, но это для текстовой ширины, например, 80 символов

3 голосов
/ 15 октября 2010

Недавно я наткнулся на ту же проблему. Мое решение - следующая функция 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», вы можете получить функцию, которая разбивает строки по определенным шаблонам (вместо просто пробелов).

1 голос
/ 10 апреля 2013

Я использую это в своей конфигурации, чтобы отсоединить / разделить последнее слово в текущей строке:

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

Он сопоставляет CTRL-j с противоположностью Join, я думаю, что это Counter-Join :) Я в основном использую его для преобразования между стилем K & 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
...