Странное поведение Vim с возвратом на пустое место .vimrc

У меня странная проблема с vim в Ubuntu. Я использовал его последние несколько недель, пытаясь научиться, в Windows, и теперь, когда я использую его в Linux, он ведет себя по-другому.

Я заметил, что в режиме вставки нажатие клавиши Backspace удалит текст, как и любой другой редактор в Windows, но в Linux текст «удаляется», но остается там, пока я не нажму ESC или не напишу поверх него.

Я пытался это исправить, но я не понимаю, является ли это предполагаемым поведением или нет. Это происходит и в gvim.

Однако причина этого вопроса заключается в следующем:

Я удалил свой файл .vimrc, чтобы увидеть, была ли какая-либо ошибка в моей конфигурации, и это исправлено. Backspace теперь вернулся к своему обычному состоянию.

Но затем я попытался создать пустой файл .vimrc, и это заставило его вернуться к отложенному удалению. Пусто. Почему, черт возьми?

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


Итак, глядя на совместимость с :h, я нашел это:

«Когда во время запуска Vim обнаруживается файл |vimrc| или |gvimrc|, этот параметр отключается, и все параметры, которые не были изменены, будут установлены на значения по умолчанию для Vim. По сути, это означает, что когда |vimrc | или |gvimrc|, Vim будет использовать значения по умолчанию для Vim, в противном случае будут использоваться значения по умолчанию для Vi (Примечание: этого не происходит ни для общесистемного файла vimrc или gvimrc, ни для файла, указанного с |- аргумент u|).

Так что, если я правильно понимаю, запуск Vim с файлом .vimrc должен автоматически установить nocompatible, а запуск его без файла должен установить совместимость...? Как бы то ни было, я попытался проверить совместимость с :verbose set? и он всегда говорит, что несовместимость включена, поэтому флаг -N ничего не должен делать ... Тем не менее, это решает проблему.


person Mxx    schedule 02.11.2017    source источник


Ответы (2)


Без vimrc Vim загрузит /usr/share/vim/vim80/defaults.vim (в зависимости от вашей версии vim). В этом файле для параметра bs/backspace установлено значение 2, или на самом деле это indent,eol,start, что совпадает с 2 (см. :h bs)

Теперь, если вы создадите пустой .vimrc, defaults.vim не будет загружен, поэтому ваш bs, возможно, будет равен 0.

Это поведение описано в :h defaults.vim

Итак, чтобы решить вашу проблему, просто поставьте set bs=2 в .vimrc.

person Doktor OSwaldo    schedule 02.11.2017
comment
set bs=2 не только bs=2. - person phd; 02.11.2017
comment
Кажется, это не исправить. Я уже пробовал это, но я все равно попробовал еще раз. Он ведет себя так же. Я также попытался скопировать весь файл по умолчанию в свой vimrc и... все еще не работает. Пока существует vimrc, backspace ведет себя странно. - person Mxx; 02.11.2017
comment
пожалуйста, предоставьте мне вывод :verbose set bs? и добавьте его к своему вопросу. - person Doktor OSwaldo; 02.11.2017
comment
Он говорит Se definió por última vez en ~/.vimrc, он же загружается из vimrc. В моем файле vimrc есть только одна строка с набором bs=2. - person Mxx; 02.11.2017
comment
и значение, которое вы получаете, равно 2? - person Doktor OSwaldo; 02.11.2017
comment
Вы пытались установить его на indent,eol,start, как это делает defaults.vim? - person Doktor OSwaldo; 02.11.2017
comment
Да, извините, что не упомянул. Было 2, попробовал второе предложение, ничего не меняется. - person Mxx; 02.11.2017

Хорошо, я исправил это.

Запуск vim с командой -N заставляет его работать правильно. Я не уверен, почему, но это то, что происходит.

person Mxx    schedule 02.11.2017
comment
что-то тут странное, а как нормально запустить vim? Флаг -N устанавливает параметр nocompatible, что vim фактически делает автоматически, если присутствует .vimrc (см. :h cp). Пожалуйста, снова запустите свой неисправный vim и поместите вывод :verbose set cp? в свой вопрос. - person Doktor OSwaldo; 02.11.2017
comment
Я запускаю vim и gvim с помощью терминала. Я больше не в классе, поэтому я не смогу протестировать другие решения до завтра. Все, что я знаю, это то, что запуск vim -N исправил эту ошибку. Причина, по которой я попробовал это, заключалась в том, что плагин emmet выдавал мне какую-то ошибку о том, что обратная косая черта не ожидается или что-то в этом роде, поэтому я нашел здесь ветку, где кто-то предложил режим -N. Это исправило как ошибку emmet, так и backspace. Кроме плагина emmet и патогена, я не запускаю никаких других плагинов. - person Mxx; 02.11.2017
comment
Вы пытались деактивировать плагин emmet? и какой терминал вы используете? взгляните на :h fixdel - person Doktor OSwaldo; 03.11.2017
comment
После этого я установил emmet, так что это все равно не проблема. Я отредактировал свой основной пост, добавив дополнительную информацию о проблеме, но, как бы там ни было... Я просто очистил vim от компьютера и переустановил его. Сейчас как-то работает. Я задолбался. - person Mxx; 03.11.2017