LINUX.ORG.RU

Кастомная переменная в статусной строке

 ,


0

1
let separator='---'
set laststatus=2
set statusline=
set statusline+=%(%l:%c%V%)
set statusline+=%{&separator}        " Не работает
set statusline+=%{&fileformat}

%{&separator} сделано наобум. Пробовал разные варианты, например с круглыми скобками.

Как починить?

Deleted

Последнее исправление: myLogin2 (всего исправлений: 4)

Ответ на: комментарий от mord0d

О, точно, работает. А можешь объяснить, почему в отступах не фурычит?

let indent=4
set tabstop=%{indent}
set softtabstop=%{indent}
set shiftwidth=%{indent}
set expandtab

Я там уже по разному пытался.

Deleted
()
Ответ на: комментарий от Deleted

let indent=4

set tabstop=%{indent}

А можешь объяснить, почему в отступах не фурычит?

Потому, что ты удаляешь гланды через задницу:

let indent=4
set tabstop=indent
set softtabstop=indent
set shiftwidth=indent
mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Неа, не работает. Выдается ошибка.

E521: Number required after =: tabstop=indent
E521: Number required after =: softtabstop=indent
E521: Number required after =: shiftwidth=indent
Deleted
()
Ответ на: комментарий от Deleted

Потому что set не жрёт переменные, tabstop, softtabstop и shiftwidth требуют int, а переменные могут быть чем угодно и внезапно измениться, что приведёт к UB.

Ты снова создаёшь проблему на ровном месте.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Э, ну просто я ожидал что твой предыдущий код работает, а он нет.

Мне удобно, чтобы tabstop, softtabstop и shiftwidth имели одинаковое значение, но при этом это единое значение можно было бы легко менять. Это задача. А использование переменной - это была попытка эту задачу разрулить.

Deleted
()
Ответ на: комментарий от Deleted

Э, ну просто я ожидал что твой предыдущий код работает, а он нет.

Этим я хотел показать, что у нас не StackOverflow, и что надо немного подумать, а не ждать, когда разжуют и в рот положат (даже в гугол уметь не надо: :h set, :h let, :h statusline).

Мне удобно, чтобы tabstop, softtabstop и shiftwidth имели одинаковое значение, но при этом это единое значение можно было бы легко менять.

Переменные в set не разворачиваются, оно жрёт только int, string и list. Всё.

set tabstop=4 shiftwidth=4 softtabstop=4

И заменяется одной регуляркой, натравленной на одну строку:

:s/4/8/g

Это задача.

Это очередная попытка удалить гланды через задницу. xD

А использование переменной - это была попытка эту задачу разрулить.

За тридцать лет никто так не делал. И никогда делать не будет, так как документация написана для того, чтобы её читать.

mord0d ★★★★★
()

Как починить?

гены школорегистранта - никак.

mos ★★☆☆☆
()
Ответ на: комментарий от Deleted

Правильно делать так:

let indent = 4
let &tabstop = indent
let &softtabstop = indent
let &shiftwidth = indent
set expandtab

Но в данном случае, есть специальный способ:

set tabstop=4
set softtabstop=-1
set shiftwidth=0
set expandtab

Так 'softtabstop' и 'shiftwidth' будут использовать значения 'tabstop'.

О, оказывается, что в режиме markdown есть подсветка для Vim.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

О, спасибо. Оказывается всё работает.

Deleted
()
Ответ на: комментарий от mord0d

Переменные в set не разворачиваются, оно жрёт только int, string и list.

Спасибо, буду знать.

Deleted
()
Ответ на: комментарий от xaizek

Дополню, тоже работает:

set tabstop=4
let &softtabstop=&tabstop
let &shiftwidth=&tabstop
set expandtab
Deleted
()
Ответ на: комментарий от xaizek

Кстати первый способ (через let) имеет свои преимущества.

set tabstop=4
set softtabstop=-1
set shiftwidth=0
set expandtab

set laststatus=2
set statusline=%{&expandtab==1?'Spaces':'Tab\ size'}:\ %{&shiftwidth} " Indentation

В статусной строке будет Spaces: 0

let indent = 4
let &tabstop = indent
let &softtabstop = indent
let &shiftwidth = indent
set expandtab

set laststatus=2
set statusline=%{&expandtab==1?'Spaces':'Tab\ size'}:\ %{&shiftwidth} " Indentation

В статусной строке будет Spaces: 4

Deleted
()
Ответ на: комментарий от Deleted

Ну или можно сделать так:

set tabstop=4
set softtabstop=-1
set shiftwidth=0
set expandtab

set laststatus=2
set statusline=%{&expandtab?'Spaces':'Tab\ size'}:\ %{shiftwidth()} " Indentation
xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.