Как мне поменять персонажа в Vim? - PullRequest
16 голосов
/ 26 марта 2012

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

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

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

Ответы [ 6 ]

10 голосов
/ 28 марта 2012

Когда я хочу соединить всего несколько строк, я использую комбинацию из 3 клавиш (обычный режим):

Jr,

является , присоединяющимся персонажем.

Если я хочу объединить несколько строк или даже объединить строки в группы, я использую предыдущую комбинацию с макросом.

Например, чтобы преобразовать 3 строки в таблицу CSV с 3 столбцами, я записываю этот макрос (назначенный на букву j, конечно):

qjJr,Jr,jq

Итак, использование @j соединяет 3 строки с использованием , и переходит на следующую строку.

10@j преобразует 10 строк.

5 голосов
/ 26 марта 2012

Нет настройки, позволяющей вам сделать это напрямую, см .:

:help J

в частности, текст под списком команд.

Несколько способов сделать это:

:nnoremap J gJi.<ESC>
" or
let joinchar = ';'
nnoremap J :s/\n/\=joinchar/<CR>

Последний параметр позволяет изменить его на лету, изменив параметр joinchar.

1 голос
/ 26 марта 2012

Попробуйте что-то подобное в вашем .vimrc:

nnoremap Y Jxi*<Esc>

Будет переназначено Y, чтобы объединить строки с *.

0 голосов
/ 02 декабря 2017

Будет быстрее, если вы замените конец строки запятой (или символом соединения)

:%s/$/,

, а затем соедините несколько строк, указав диапазон, или выбрав строки в визуальном режиме и используякоманда соединения

10J
0 голосов
/ 30 марта 2013

С 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 на ​​что-то другое.

0 голосов
/ 26 марта 2012

Это отображение. Вы можете прочитать учебник в vim wikia: Отображение ключей в vim

Попробуйте команду ниже в командном режиме и попробуйте нажать. Это должно работать :)

:map <space> J
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...