Добавление отступа Vim для шаблонов C++?

Вы можете использовать методы jQuery $. Grep () , чтобы заменить Array.find()

Array.splice(), вместо этого, кажется, поддерживается в IE 5.5

также хороший polyfill, который должен работать на IE9:

Array.prototype.find = Array.prototype.find || function(callback) {
  if (this === null) {
    throw new TypeError('Array.prototype.find called on null or undefined');
  } else if (typeof callback !== 'function') {
    throw new TypeError('callback must be a function');
  }
  var list = Object(this);
  // Makes sures is always has an positive integer as length.
  var length = list.length >>> 0;
  var thisArg = arguments[1];
  for (var i = 0; i < length; i++) {
    var element = list[i];
    if ( callback.call(thisArg, element, i, list) ) {
      return element;
    }
  }

Ссылка: https://github.com/jsPolyfill/Array.prototype.find/blob/master/find.js

6
задан Judge Maygarden 23 December 2008 в 03:45
поделиться

2 ответа

Можно использовать identexpr опцию указать отступ путем оценки выражения (т.е. записи функции сценария энергии). Эта функция должна принять строку - строку - и возвратить количество пробелов для расположения с отступом. Это дает Вам гибкость для возврата уровня отступа для этого шаблонного условия или нейтрализации для автоматического отступа, smartindent или cindent в нормальных, подобных C ситуациях.

Вот пример, который был создан для обработки расширения сигналов и слотов QT. Это демонстрирует нейтрализацию функции cindent.

2
ответ дан 17 December 2019 в 02:34
поделиться

Мое решение:

" Don't indent namespace and template
function! CppNoNamespaceAndTemplateIndent()
    let l:cline_num = line('.')
    let l:cline = getline(l:cline_num)
    let l:pline_num = prevnonblank(l:cline_num - 1)
    let l:pline = getline(l:pline_num)
    while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)'
        let l:pline_num = prevnonblank(l:pline_num - 1)
        let l:pline = getline(l:pline_num)
    endwhile
    let l:retv = cindent('.')
    let l:pindent = indent(l:pline_num)
    if l:pline =~# '^\s*template\s*\s*$'
        let l:retv = l:pindent
    elseif l:pline =~# '\s*typename\s*.*,\s*$'
        let l:retv = l:pindent
    elseif l:cline =~# '^\s*>\s*$'
        let l:retv = l:pindent - &shiftwidth
    elseif l:pline =~# '\s*typename\s*.*>\s*$'
        let l:retv = l:pindent - &shiftwidth
    elseif l:pline =~# '^\s*namespace.*'
        let l:retv = 0
    endif
    return l:retv
endfunction

if has("autocmd")
    autocmd BufEnter *.{cc,cxx,cpp,h,hh,hpp,hxx} setlocal indentexpr=CppNoNamespaceAndTemplateIndent()
endif
4
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: