Как изменить символ соединения в Vim? - программирование
Подтвердить что ты не робот

Как изменить символ соединения в Vim?

В Vim можно присоединить две строки, набрав капитал J. Однако к ним обычно присоединяется пробел.

Кажется, я помню, что был способ изменить символ, используемый для соединения, установив некоторую переменную, но я не могу найти ее снова.

Буду признателен, если кто-нибудь сможет напомнить мне или подтвердить, что это невозможно.

4b9b3361

Ответ 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