Vim - statusline и ссылки

[1179641] просто небольшой взлом: [1180122]grep -E 'PATTERN' <имя файла> | grep --color -E "^[^#]*|$" -

можно использовать так: первый [1180124]grep[1180125] совпадает с линиями с PATTERN, а второй [1180126]grep[1180127] цветными линиями, которые не начинаются с '#'.

Я не думаю, что [1180128]grep -цвет [1180129] может делать условную раскраску.[1179646].

1
12.09.2014, 07:16
2 ответа

Ответ @Gnouc идет в правильном направлении, но вы не должны вызывать внешнюю команду из оценочной строки statusline ! Это вызовет новый процесс при каждом перемещении курсора и вводе символа и снизит производительность Vim (как вы уже испытали).

Лучше разделить это на две части: : autocmd , который обновляет переменную при каждом изменении текущего буфера, и очень эффективное использование этой переменной в самой строке состояния:

set statusline=%{exists('b:actualCwd')?b:actualCwd:getcwd()}/%f%=%m\ %y\ \%r\ %1*\ \%l\:\%c\ \%2*\ \ \%p%%\ \ 
autocmd BufEnter * let b:actualCwd = system('echo -n $(pwd -L)')
2
27.01.2020, 23:13

Вы не можете сделать это напрямую с vim, vim всегда разрешает ссылки, чтобы найти имя фактического файла.

Из :h E773:

For symbolic links Vim resolves the links to find the name of the actual file.  
The swap file name is based on that name.  Thus it doesn't matter by what name  
you edit the file, the swap file name will normally be the same.

Вы можете использовать внешнюю команду для получения текущей рабочей директории, плюс %f статусной строки.

Попробуйте:

set statusline=%{system('echo\ -n\ $\(pwd\ -L\)')}/%f%=%m\ %y\ \%r\ %1*\ \%l\:\%c\ \%2*\ \ \%p%%\ \ 

Дополнительная информация:

:h E773
:h todo.txt
:h version7.txt
5
27.01.2020, 23:13

Теги

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