Автоматическая «модная» вставка комментариев с Vim - PullRequest
1 голос
/ 16 августа 2011

Мне бы хотелось, чтобы такие комментарии были в моем коде C:

/********************************************************
 * Blah
 ********************************************************/

Но я устаю набирать все эти звездочки, и копирование / вставка также может раздражать. Мне было интересно, смогу ли я создать макрос с Vim, чтобы, если я нажму (например) CTRL+L, он автоматически вставил бы эту структуру в мой код и выровнял курсор по центру (там, где написан фактический комментарий) .

Любой совет будет оценен. Спасибо!

Ответы [ 4 ]

5 голосов
/ 16 августа 2011

Если вы планируете пойти на snipmate (что, IMHO, хороший выбор!), Вам следует рассмотреть возможность использования версии, поддерживаемой Garbas на github (обратите внимание на необходимые плагины в файле readme),Версия от msanders больше не поддерживается.

Поскольку я новичок, я не могу добавить комментарий к ответу выше ... Извините

4 голосов
/ 16 августа 2011

Взгляните на snipmate , плагин vim для TextMate-подобных фрагментов.

snipMate.vim реализует некоторые функции фрагментов TextMate в Vim.Фрагмент - это фрагмент часто набираемого текста, который вы можете вставить в документ, используя триггерное слово, за которым следует .

2 голосов
/ 16 августа 2011

Вы можете использовать cvim и редактировать ~/.vim/c-support/templates/c.comments.template по своему вкусу.

0 голосов
/ 18 августа 2011

Хех, только сегодня я усилил собственную поддержку для этого (так как эти заголовки предписаны стандартом кодирования компании).

iabbrev //== // (96 equal characters)<Enter>//<Enter>// (96 equal characters)<C-O>k
iabbrev //-- // (96 dashes)<Enter>//<Enter>// (96 dashes)<C-O>k

Это позволяет мне набирать // ==, и когда я нажимаю пробел, все вводится, и я остаюсь с курсором "посередине", где я хочу.

Итак, для OP, если вы хотите использовать Ctrl-L, сделайте что-то вроде этого:

inoremap <C-L> /*****<Enter> * <Enter>*****<C-O>k

(хотя я сам люблю аббревиатуры ...)

Так как в нашем стандарте кодирования есть и другие моменты, в которых нам нужно расширить тире и равны столбцу 100, я подытожил это сегодня:

iabbrev <expr> === InsertTo99Width('===')
iabbrev <expr> --- InsertTo99Width('---')

function! InsertTo99Width(insertion)
    let l:line = getline('.')
    let l:linelen = strlen(l:line)
    let l:col = col('.')
    let l:numchars = (99 - col)

    let l:inserted = a:insertion
    if (l:linelen <= l:col) && (l:numchars > 0)
        let l:numchars += len(l:inserted)
        while len(l:inserted) < l:numchars
            let l:inserted = l:inserted . l:inserted
        endwhile
        return l:inserted[0 : l:numchars]
    else
        return l:inserted
    endif
endfunction

(Я вроде новичка в сценарии vim, так что может быть более простой способ сделать строку длиной N символов, но это позволяет повторять произвольные строки произвольной длины, так что если вам нравится dash-space-equal- пространство или что-то, это все равно будет выглядеть "красиво".)

В любом случае, наконец - вы можете использовать <expr> и в inoremap, если хотите, так что вы можете сделать так, чтобы звёздочки переместились на заданную ширину на основе вывода функции. Там много силы, но для того, чтобы получить ее так, как вы хотите, может потребоваться немного усилий ...

...