Ищу помощь для vimscript о уценке - PullRequest
1 голос
/ 18 марта 2020

В настоящее время я использую удобное отображение в моем vimr c для создания ссылок уценки:

autocmd Filetype markdown inoremap <buffer> <silent> ,a [](<++>) <++><Esc>F[a

Но я хочу улучшить его. Вот мои потребности:

"В типе файла уценки, нажмите ,a, если под курсором слово или в визуальном режиме, используйте URL в yank *, чтобы сделать текущее слово или область выбора ссылкой на уценку автоматически ,

etc:
word  ==>  [word](url in the yank *)

, иначе просто дал мне пустую область ссылок, как указано выше.

И еще, я думаю, как это можно реализовать с помощью сниппета, а не vimscript .

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Ручной способ, не очень компактный, но, надеюсь, разборчивый:

function! CloseBracket(type)
    let l:wrap = "[\<C-r>\"](\<C-r>+)"
    if a:type ==? 'v'
        execute "normal! gvs" . l:wrap
    else
        let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
        if l:char =~ '^\s*$'
            execute "normal! i[]()\<esc>hh"
            call feedkeys('i')
        else
            let l:reg = @"
            let @" = expand("<cword>")
            echom 'mode: ' . a:type
            if mode() ==? 'n'
                execute "normal! ciw" . l:wrap
            endif
            let @" = l:reg
        endif
    endif
endfunction

nnoremap <leader>a :<C-u>call CloseBracket('n')<CR>
xnoremap <leader>a :<C-u>call CloseBracket('v')<CR>

Объяснение:

  • Два сопоставления для вызова одной функции с аргументом, который заявляет он был вызван из обычного или визуального режима

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

  • Если обычный режим и курсор над словом, слово заключено в квадратные скобки, а регистр + вставлен в скобки

  • Если визуальный выбор, то визуальный выбор заключен в квадратные скобки и регистр + вставлен в скобки

  • Не отменяет регистры

  • Одиночное действие отмены

Ограничение:

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

  • Не проверено в регистре + как этот регистр не работает на моем телефоне эмулятор терминала, см. первую строку функции, которая устанавливается как регистр +, если необходимо настроить

1 голос
/ 18 марта 2020

Если вы привыкли к фрагментам с такими заполнителями (<++>), mu-template предоставляет link фрагмент , который расширяется почти точно в соответствии с вашим отображением.

Существует также окружающий режим .

По умолчанию текущий выбор будет использоваться в поле text . Если вы введете «2» до запуска визуального окружения, оно будет go в поле url .

РЕДАКТИРОВАТЬ: если вы хотите сделать это вручную, самый простой способ будет использовать s для замены выделения тем, что вы sh вставляете, и помните, что вырезанные символы находятся в регистре по умолчанию (что запутано этим простым решением)

" CTRL-G_U permits to enable redo
xnoremap <buffer> ,a s[<c-r>"]()<c-g>U<left>
" default selection with: current-inner-word, fallback to the other definition
nmap     <buffer> viw,a

" For some reason, I cannot make the following work without using a variable
" xnoremap <buffer> ,else s[](<c-r>")<c-r>=repeat("\<C-G>u\<left>", strwidth(@")+3)<cr>
" Any way, as redo is quite funny here, let's use directly
xnoremap <buffer> ,else s[](<c-r>")<esc>F]i
nmap viw,else

Прочее Подходы заключаются в первом добавлении после обратной кавычки +>, затем вставке перед обратной кавычкой + <метка. Они оставляют регистр по умолчанию без изменений. Но они определенно не поддерживают повтор. Они также не приспособлены для вставки старого выделения в нескольких местах. </p>

...