Я получаю зарегистрированные данные в текстовом файле, который представляет собой одну длинную строку с каждым значением, разделенным пробелом. Есть ли команда или набор команд, которые разбивают одну строку на несколько строк?
11
Я получаю зарегистрированные данные в текстовом файле, который представляет собой одну длинную строку с каждым значением, разделенным пробелом. Есть ли команда или набор команд, которые разбивают одну строку на несколько строк?
Вы можете просто заменить любой последовательный пробел в строке новой строкой, используя команду :s/\s\+/\r/g
. \s\+
означает один или несколько пробельных символов и \r
является новой строкой, смотрите :help :substitute
и :help regexp
для деталей. Если вы запустите команду в строке вроде:
foo bar baz
Ты получаешь:
foo
bar
baz
Если вы hlsearch
включили и не хотите, чтобы ваш экран везде загромождался выделенными пробелами, вы можете написать небольшую функцию, подобную следующей, чтобы избежать этого:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, видите:help s/\r
. Его можно заменить буквальным вводом новой строки<c-v><cr>
. В этом контексте\n
нулевой символ, см:help s/\n
.replaces the content of the register
- какой регистр?Использование
vim
подстановки, вероятно, является одним из лучших способов выполнить вашу задачу, но вы также можете использовать макрос. Предположим, у нас есть следующие данные с курсором в строке 1:При запуске в обычном режиме нажатие qqзапускает запись макроса, вызываемого с помощью @q. Все, что qqбудет напечатано после, будет повторяться через вышеупомянутый вызов. Наша цель - записать обычные команды, которые будут достаточно общими, чтобы обеспечить непрерывное повторение.
Таким образом, мы можем напечатать 0курсор, чтобы перевести курсор в начало строки, а затем fspaceпереместить курсор в первый пробел. Это позволяет нам затем печатать renter, что приводит к:
Удар qсейчас - хорошая идея, так как наш повторно используемый макрос готов к повторению. Несколько условно отметим, что осталось 4 пробела для замены на новые строки. Таким образом, нажимая, 4@qмы повторяем
q
макрос 4 раза, в результате чего:Обратите внимание, что из-за того, как мы настроили макрос, было бы безопасно повторить команду более 9000 раз, так как это повлияет только на текущую строку, и, поскольку не было пробелов справа от последнего ввода данных, fspaceбудет «красиво» терпит неудачу, предотвращая замену данных на новые строки.
Итак, повторить с самого начала:
qq0fspacerenterq9001@q
обеспечивает наш результат.
источник
9001
клавиша на клавиатуре для быстрого ввода вашего имени пользователя.Самый простой способ разделить строки в Vim - это команда нормального режима
gq
(быстро набрать обе буквы в обычном или визуальном режиме).В визуальном режиме он будет разделять все, что выбрано, в обычном режиме вы будете следовать
gq
движению.Например,
gql
разделит одну строку на текущую заданную ширину. Для того, чтобы установить ширину расщепленных линий будет отличаться от текущей настройки, вы можете использовать:set textwidth=n
, гдеn
это количество символов , которые вы хотите в строке, например,10
и изменение назад к нормальной ширины , когда вы закончите.Получил эту информацию из видео на Youtube от Kholidfu, которое показывает, как соединять и разбивать линии в обычном режиме с помощью движения.
источник