Вкладка По сравнению с предпочтениями Пространства в Vim

Кажется, что вызывающая сторона не говорит Вам диапазоны, которые это хочет.

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

Позволяют нам определить "хороший". Я назвал бы хорошим, если маркировки выключены:

1. 2^n, for some integer n. eg. ..., .25, .5, 1, 2, 4, 8, 16, ...
2. 10^n, for some integer n. eg. ..., .01, .1, 1, 10, 100
3. n/5 == 0, for some positive integer n, eg, 5, 10, 15, 20, 25, ...
4. n/2 == 0, for some positive integer n, eg, 2, 4, 6, 8, 10, 12, 14, ...

Находят макс. и минута Вашего ряда данных. Давайте назовем эти точки:

min_point and max_point.

Теперь все, что необходимо сделать, является находкой, 3 значения:

- start_label, where start_label < min_point and start_label is an integer
- end_label, where end_label > max_point and end_label is an integer
- label_offset, where label_offset is "nice"

, которые соответствуют уравнению:

(end_label - start_label)/label_offset == label_count

существует, вероятно, много решений, поэтому просто выбирают то. Большую часть времени я держал пари, что можно установить

start_label to 0

, поэтому просто пробуют различное целое число

end_label

, пока смещение не "хорошо"

86
задан nelstrom 20 October 2009 в 15:44
поделиться

6 ответов

Создание параметра stab в самом Vim не поможет будет проще, но я создал эту команду / функцию, которую вы можете добавить в свой .vimrc (или в файл плагина, если вы суперорганизованы). Используйте : Stab , и вам будет предложено указать уровень отступа и указать, следует ли использовать expandtab . Если вы нажмете Enter, не задав новый уровень отступа, он просто напечатает текущие настройки.

" put all this in your .vimrc or a plugin file
command! -nargs=* Stab call Stab()
function! Stab()
  let l:tabstop = 1 * input('set shiftwidth=')

  if l:tabstop > 0
    " do we want expandtab as well?
    let l:expandtab = confirm('set expandtab?', "&Yes\n&No\n&Cancel")
    if l:expandtab == 3
      " abort?
      return
    endif

    let &l:sts = l:tabstop
    let &l:ts = l:tabstop
    let &l:sw = l:tabstop

    if l:expandtab == 1
      setlocal expandtab
    else
      setlocal noexpandtab
    endif
  endif

  " show the selected options
  try
    echohl ModeMsg
    echon 'set tabstop='
    echohl Question
    echon &l:ts
    echohl ModeMsg
    echon ' shiftwidth='
    echohl Question
    echon &l:sw
    echohl ModeMsg
    echon ' sts='
    echohl Question
    echon &l:sts . ' ' . (&l:et ? '  ' : 'no')
    echohl ModeMsg
    echon 'expandtab'
  finally
    echohl None
  endtry
endfunction
55
ответ дан 24 November 2019 в 08:07
поделиться

Ваше понимание softtabstop и expandtab неверно - поэтому вариант stab , который вы предлагаете, будет не очень полезен.

expandtab предназначен для случаев, когда вы хотите использовать пробелы вместо табуляции для всего . Если вы установите expandtab , то Vim игнорирует параметр softtabstop и использует tabstop и shiftwidth , чтобы определить, сколько пробелов нужно вставить.

softtabstop используется только тогда, когда вы хотите использовать сочетание табуляции и пробелов, позволяя делать отступ с точным контролем (2 или 4 пробела), сохраняя при этом ширину табуляции на более высоком уровне значение (обычно 8), чтобы текст отображался в других приложениях. Установка softtabstop = tabstop ничего не дает, потому что Vim всегда будет использовать табуляцию для отступов.

Обновление: Как указано в kaizer.se , если вы используете expandtab , тогда вам все равно нужно установить softtabstop , если вы хотите, чтобы Vim возвращал несколько пробелов назад, как если бы они были табуляцией.

сохраняя ширину табуляции на более высоком значении (обычно 8), чтобы текст отображался в других приложениях. Установка softtabstop = tabstop ничего не дает, потому что Vim всегда будет использовать табуляцию для отступов.

Обновление: Как указано в kaizer.se , если вы используете expandtab , тогда вам все равно нужно установить softtabstop , если вы хотите, чтобы Vim возвращал несколько пробелов назад, как если бы они были табуляцией.

сохраняя ширину табуляции на более высоком значении (обычно 8), чтобы текст отображался в других приложениях. Установка softtabstop = tabstop ничего не дает, потому что Vim всегда будет использовать табуляции для отступа.

Обновление: Как указано в kaizer.se , если вы используете expandtab , тогда вам все равно нужно установить softtabstop , если вы хотите, чтобы Vim возвращал несколько пробелов назад, как если бы они были табуляцией.

2
ответ дан 24 November 2019 в 08:07
поделиться

Если установлено expandtab , то (как указывает слишком много php), softtabstop становится избыточным. Единственная причина, по которой вы можете установить shiftwidth иначе, чем tabstop , - это удовлетворить странную привычку; например, вы используете отступы с четырьмя пробелами, но предпочитаете tab для вставки восьми пробелов.

Если expandtab не задано, все становится нечетким. Если вы хотите, чтобы ваш код в cat и не-vim редакторах выглядел так же, как в vim, то для tabstop всегда нужно устанавливать значение 8; в этом случае вы должны установить softtabstop и shiftwidth на свой предпочтительный уровень отступа. Если вы предпочитаете, чтобы каждая "физическая вкладка"

3
ответ дан 24 November 2019 в 08:07
поделиться

Это моя первая попытка написать VimScript, но вот что:

function! Stab(value)
    let &shiftwidth  = a:value
    let &softtabstop = a:value
    let &tabstop     = a:value
endfunc

Если я помещу это в свой файл .vimrc, я могу вызвать его, запустив : call Stab (X ) , где X - желаемая ширина табуляции. На данный момент это подходящее решение, но если кто-нибудь может предложить способ облегчить вызов, я был бы признателен.

Я также создал функцию, которая быстро суммирует текущие настройки, которые я сопоставил с ctrl- Tab:

nmap <C-Tab> :call TabParams()<CR>
function! TabParams()
    echo "tabstop:     ".&tabstop
    echo "shiftwidth:  ".&shiftwidth
    echo "softtabstop: ".&softtabstop
endfunc

Ну, я назначил награду в 100 баллов за этот ответ, и теперь я сам решил половину. Не уверен, что могу принять свой ответ ...

9
ответ дан 24 November 2019 в 08:07
поделиться

Вы так часто меняете настройки пустого пространства, что вам действительно нужна функция для управления этим? Если вы много возитесь с tabstop, а также устанавливаете expandtab, у вас, вероятно, со временем будет беспорядок, когда вы будете менять файлы с разными значениями, переданными в stab . Сегодня я использую : call stab (4) , завтра это : call stab (2) , а на прошлой неделе это было : call stab (8) . Похоже, даже если вы напишете его, вы скоро перестанете его использовать.

Если вы планируете всегда передавать одно и то же значение для stab, почему бы просто не отредактировать ваши глобальные настройки? В vim:

:e $MYVIMRC

и добавьте следующее:

set tabstop=4
set shiftwidth=4  "tabs are 4 spaces wide (default = 8)
set expandtab     "Convert tabs to spaces

Вот как настраивается мой .vimrc.

2
ответ дан 24 November 2019 в 08:07
поделиться

Вы также можете в режиме редактирования использовать Ctrl-T для отступа и Ctrl-D для перехода на следующий уровень отступа, установленный ] shiftwidth , независимо от настроек tabstop , softtabstop или expandtab . Vim автоматически добавит / удалит пробелы или табуляторы, чтобы перейти в правый столбец.

Если вы используете эти команды для управления отступом вместо Tab / Backspace , у вас нет беспокоиться о том, чтобы все эти настройки вкладок совпадали друг с другом, и всегда добиваться правильного уровня отступа.

7
ответ дан 24 November 2019 в 08:07
поделиться
Другие вопросы по тегам:

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