Я знаю, что могу объединять строки в Vim с J
несколькими вариантами ( gJ
и т. Д.); J
будет «Удалить отступ и вставить до двух пробелов» .
Но есть ли простой способ вставить другой символ вместо двух пробелов? Например, запятая ( ,
) или запятая и пробел ( ,
)?
Данный:
8
9
10
32
Я хотел бы закончить с:
8, 9, 10, 32
или:
8,9,10,32
line-breaks
Мартин Турной
источник
источник
Ответы:
Я написал плагин Join, может делать то, что вы хотите, и многое другое.
подробнее и скриншоты:
https://github.com/sk1418/Join
источник
Простой способ заключается в следующем: просто выберите ваши строки (все, кроме последней) - или используйте
%
- и запустите:или
(где, конечно,
'<,'>
часть уже была вставлена после:
Vim, чтобы предназначаться для выбора)(2-е) Обновление:
Основываясь на вышеизложенном (и комментарии Сато Кацуры ), вот возможная реализация "интерактивного соединения" с подсчетом и дополнительной поддержкой повторов:
И фактическое отображение:
Это что-то вроде (*)
J
, но интерактивное - оно запросит строку-разделитель. Строка по умолчанию - это пробел, поэтому, например, чтобы соединить строки без разделителя, нажмите,Backspace
когда будет предложено, удалить символ пробела по умолчанию иEnter
принять (теперь) пустой разделитель. Граф, например3J
, тоже работает. Еслиtpope/vim-repeat
плагин установлен, повторите с '.' также будет работать, повторно используя последний разделитель и (если не изменился - например10.
) последний счетчик или диапазон визуальной линии.(*) Хотя это не совсем так
J
: хотя он удалит отступ, он не будет проверять.!?
(конец фразы) вставку 2 пробелов вместо одного или вставку пробела только в случае его отсутствия (трудно сделать что-то вроде это, так как строка-разделитель теперь может быть чем угодно). Это также удалит завершающие пробелы (имеет больше смысла).Я думаю, что это может быть хорошим способом перегрузить ограниченное пространство букв операторов :)
Ну, технически
J
это не совсем оператор, но он близок к одному - например, вы не можетеJaw
присоединиться к «слову».(предложения приветствуются)
источник
:'<,'>-1s/\n/, /
для отмеченных строк или:1,$-1s/\n/, /
для всего файла.-1
?'<,'>-s/\n/, /
или1,$-s/\n/, /
так-
же, как-1
.l:sep
есть&
, то ваша замена будет работать неправильно, так как&
это волшебство в замене. Возможно, лучше использовать\=
буквальную строкуlet l:subst = 's/\n\+/\=' . "'" . l:sep . "'/"
- вместо того, чтобы пытаться обработать экранирование.Вот пример использования внешней команды:
где
%!
заменяет текущий буфер (содержимое файла) командой:paste -sd,
(параметры-s
используются для объединения нескольких строк и-d
установки символа разделителя,
).источник
На всякий случай, если кому-то не нравится вводить Regex и запоминать больше команд Plugin Ex:
Визуальный блок Добавить
Visual-block Append доступен в режиме Visual Block (
<C-v>
) и может делать блок A ppend (и блок I nsert для prepend). (ссылка::help v_b_A
,:help v_b_I
)И если последним движением в блочном визуальном режиме является
$
, добавление будет сделано в конце всех выборов; или же пробелы будут вставлены перед добавленным вами текстом (представьте выравнивание закрытия)
в конце нескольких вызовов метода в коде).С образцом текста ниже и курсором
8
:<C-v>}$A,<C-c>
, После возврата в нормальный режим, мы видим,
, добавляется ко всем выбранным строкам. (Попробуй без$
)Затем
gv
снова выберите область иJ
илиgJ
. У нас есть трейлинг,
:8,9,10,12,
и$x
мы закончили.Используйте Вставку для Трейлинга
,
Давайте отменим наш текст (будь то
uu..u
причудливый:ea 1d<cr>:lat 1
) и попробуем Visual Insert:j<C-v>}I, <C-c>
и тогда мы можем соединить строкиgJ
без пробелов.Подождите, подождите, подождите, что-то не хватает. Как повторно выбрать весь «массив»? На этот раз мы не выбрали первую строку ... так
gv
что не помогает.- Или это может помочь,
gvok
повторно выбрать (gv
),o
угол pposite иk
вверх.PS Мой мизинец не быстрый и точный достаточно набрать
/\
для/\n
, так что я , как объединение Vim встроенные операций и движения , чтобы избежать использования Regex. Однако, если я делаю это достаточно часто, использую отображение - возможно, те, которые отображаются на плагины, должны быть лучше.источник
Гораздо более простой способ без плагинов или внешних команд переназначить join (
J
) из пробела на любой символ, который вам нравится. Например, для объединения с запятой и пробелом:Для ввода символа новой строки в конце (
^M
) нажмите,Ctrl-V
а затем нажмите Return / Enter. То же самое происходит, если вы хотите заменить на tab (^I
), введитеCtrl-I
затемTab
.Что это делает, это заменяет новую строку на вкладку в текущей строке и переназначает это поведение на символ J.
Это также работает с комбинациями, например,
4J
чтобы соединить следующие 4 строки.источник
Вы можете записать макрос для объединения строк с запятой. Это полезно, если это редкая или одноразовая задача, и вы не можете вспомнить, как написать замещающую команду и регулярное выражение для выполнения задачи, но вы помните, как записывать и запускать макрос.
Чтобы объединить строки с запятой, введите qjgJi,Escqзапись макроса в регистр
j
. Затем вы можете запустить макрос с @j. Вы можете перезапустить макрос с помощью @@, что экономит при наборе текста при запуске его несколько раз подряд - вы даже можете просто удерживать, @пока не дойдете до конца строк, к которым хотите присоединиться. Вы также можете использовать числовой префикс @jили @@повторять его определенное количество раз. Это оставляет начальные и конечные пробелы нетронутыми, поэтому пробелы будут до или после запятой, если в вашем исходном тексте были пробелы.Чтобы объединить запятую и пробел, вставьте Spaceмежду ,и Escпри записи макроса.
Вы также можете использовать Jвместо gJзаписи макрос, который обычно объединяет строки с запятой и пробелом. Однако, если текущая строка имеет конечные пробелы, запятая будет отображаться после пробела без пробела после нее. Кроме того , она не включает в себя пространство , если следующая строка начинается с
)
, и это ставит два пробела после запятой , еслиjoinspaces
установлено и текущие концы линии с.
,!
или?
. Эти предостережения описаны ниже:help J
.источник