Как изменить символ соединения в Vim?
В Vim можно присоединить две строки, набрав капитал J.
Однако к ним обычно присоединяется пробел.
Кажется, я помню, что был способ изменить символ, используемый для соединения, установив некоторую переменную, но я не могу найти ее снова.
Буду признателен, если кто-нибудь сможет напомнить мне или подтвердить, что это невозможно.
Ответы
Ответ 1
Когда я хочу присоединиться к нескольким строкам, я использую комбинацию из 3 клавиш (обычный режим):
Jr,
является ,
символом соединения.
Если я хочу присоединиться к другим строкам или даже присоединиться к строкам в группах, я использую предыдущую комбо с макросом.
Например, чтобы преобразовать 3 строки в таблицу CSV из 3 столбцов, я записываю этот макрос (назначается буквам j
, конечно):
qjJr,Jr,jq
Итак, используя @j
, объединяет 3 строки, используя ,
, и переходит к следующей строке.
[email protected]
преобразует 10 строк.
Ответ 2
Нет настройки, которая позволяет вам сделать это прямо, см.
:help J
в частности, текст под списком команд.
Несколько способов сделать это:
:nnoremap J gJi.<ESC>
" or
let joinchar = ';'
nnoremap J :s/\n/\=joinchar/<CR>
Последний вариант позволяет вам изменить его на лету, изменив параметр joinchar.
Ответ 3
Попробуйте что-то подобное в вашем .vimrc:
nnoremap Y Jxi*<Esc>
Он переназначит Y, чтобы присоединиться к строкам с помощью *
.
Ответ 4
Из http://vim.wikia.com/wiki/Remap_join_to_merge_comment_lines
поместите это в свой .vimrc:
function! JoinWithLeader(count, leaderText)
let l:linecount = a:count
" default number of lines to join is 2
if l:linecount < 2
let l:linecount = 2
endif
echo l:linecount . " lines joined"
" clear errmsg so we can determine if the search fails
let v:errmsg = ''
" save off the search register to restore it later because we will clobber
" it with a substitute command
let l:savsearch = @/
while l:linecount > 1
" do a J for each line (no mappings)
normal! J
" remove the comment leader from the current cursor position
silent! execute 'substitute/\%#\s*\%('.a:leaderText.'\)\s*/ /'
" check v:errmsg for status of the substitute command
if v:errmsg=~'Pattern not found'
" just means the line wasn't a comment - do nothing
elseif v:errmsg!=''
echo "Problem with leader pattern for JoinWithLeader()!"
else
" a successful substitute will move the cursor to line beginning,
" so move it back
normal! ``
endif
let l:linecount = l:linecount - 1
endwhile
" restore the @/ register
let @/ = l:savsearch
endfunction
nnoremap <space> :<C-U>call JoinWithLeader(v:count, '"')<CR>
Это также позволяет переназначить J на что-то еще.
Ответ 5
Это будет быстрее, если вы замените конец строки запятой (или символом соединения)
:%s/$/,
а затем объединение нескольких строк либо путем предоставления диапазона, либо путем выбора строк в визуальном режиме и использования команды соединения
10J
Ответ 6
Это отображение. Вы можете прочитать учебник в vim wikia:
Отображение ключей в vim
Попробуйте выполнить команду ниже в командном режиме и попробуйте нажать. Это должно работать:)
:map <space> J