vimtex: force} и {не пропускать пустые строки - PullRequest
0 голосов
/ 30 августа 2018

Когда я использую } и {, vimtex + vim перемещается в документе несколько случайным образом, пропуская несколько пустых строк. Смотри ниже.

Как восстановить поведение vim по умолчанию, чтобы не пропускать пустые строки?

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Краткий ответ

Тот факт, что пропуск происходит довольно случайно, указывает на то, что пустые строки на самом деле не пусты. Они содержат пробелы или другие специальные символы.

Переместите курсор на эти «пустые» строки и нажмите $, чтобы увидеть, действительно ли они пусты.


Как избежать таких проблем:

(Да, у других тоже была ваша проблема.)

Сделать vim показывать пробельные символы
У Vim есть способ показать этих персонажей. Используйте set list и определите listchars. Из справки vim для listchars:

    Strings to use in 'list' mode and for the :list command.  It is a
    comma separated list of string settings. 
    [...]
                                                    lcs-space
      space:c       Character to show for a space.  When omitted, spaces
                    are left blank.
                                                    lcs-trail
      trail:c       Character to show for trailing spaces.  When omitted,
                    trailing spaces are blank.  Overrides the "space"
                    setting for trailing spaces.

См. :help :list и :help listchars для получения дополнительной информации.


Выделите конечные пробелы
Я нахожу довольно раздражающим то, что всегда отображается символ для любого пробела, и мои глаза слишком плохи, чтобы видеть маленькую точку в конце строки (для конечных пробелов). Поэтому я использую группу выделения, чтобы показать все завершающие пробельные символы:

" Show trailing whitespace
    highlight ExtraWhitespace ctermbg=red       " define highlight group                      
    match ExtraWhitespace /\s\+$/               " define pattern
    autocmd BufWinEnter * match ExtraWhitespace /\s\+$/         " apply match to all buffers
    autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/  " don't match while in insert 
    autocmd InsertLeave * match ExtraWhitespace /\s\+$/
    autocmd BufWinLeave * call clearmatches()                   " It's good for the RAM

Автоматическое удаление конечных пробелов
Существует также способ автоматического удаления этих символов при записи в буфер - но есть некоторые предостережения (вспомните о двойном замыкающем пробеле у разметки для разрывов строк).

Vim wiki имеет хорошее объяснение.

Самое простое (но, возможно, не самое лучшее) решение - добавить

 autocmd BufWritePre * %s/\s\+$//e

в .vimrc или соответствующие ftplugin файлы. Лично у меня есть функция в моем vimrc, и я отключаю ее для типов файлов, где она мне не нужна / не нужна.


Вас также может заинтересовать Заставить {и} игнорировать строки, содержащие только пробелы


Отказ
Могут быть символы, которые не являются пробелами, но также не отображаются vim по умолчанию. У меня никогда не было этой проблемы, но то, что я сказал в «Коротком ответе», все еще применимо.

0 голосов
/ 31 августа 2018

Найдите, есть ли сопоставления для }, используя

:map }

Теперь вы можете отменить отображение любых отображений, найденных с помощью

:unmap }

Если вы хотите поместить это в .vimrc, я бы предложил сделать это в каталоге after для этого плагина.

как ~/.vim/after/plugin

...