Сопоставление «Ctrl + O» в vim не работает

Я только что установил Ubuntu 16.04, а затем установил vim. Вскоре я понял, что Ctrl + O, который я регулярно использую в vim для перехода на последнее место, не работает! После недолгих поисков я получил следующие команды:

:nnoremap <M-Left> <C-O>

а также

:nnoremap <X1Mouse> <C-O>

Я пытался поместить их оба в свой .vimrc, но они не дали мне желаемого эффекта. Меня это очень раздражает, так как это одна из самых часто используемых вещей, которыми я пользуюсь. Что мне не хватает?

Изменить: я переустановил vim с нуля, а также удалил файл ~/.vimrc. После удаления файла я проверил наличие /usr/share/vim/vimrc; это было там. Затем я установил vim и проверил на Ctrl+o; он работает, пока я не закрою файл. Однако, когда я открываю его обратно, он забывает всю историю.


person Peaceful    schedule 20.09.2017    source источник
comment
Вы видите +jumplist, когда делаете версию vim? Вы пытались использовать `` вместо ctrl-o   -  person dlmeetei    schedule 20.09.2017
comment
Глупый я! Я никогда не думал, что o и O будут иметь такое значение в vim. Спасибо.   -  person Peaceful    schedule 20.09.2017
comment
Я думал, что изменение с O на o должно работать. Это не так.   -  person Peaceful    schedule 20.09.2017
comment
У вас есть jumplist?   -  person dlmeetei    schedule 20.09.2017
comment
Что такое jumplist и как его проверить?   -  person Peaceful    schedule 20.09.2017
comment
vim --version | grep jump дает мне +cmdline_hist +jumplist +persistent_undo +virtualedit .   -  person Peaceful    schedule 20.09.2017
comment
Я не полностью следую. <C-o> работает или нет? Если нет, то какое отношение к этому имеют сопоставления? Или это просто сопоставления, которые не работают?   -  person Ingo Karkat    schedule 20.09.2017
comment
@IngoKarkat: По умолчанию это не работало. Затем я попробовал сопоставления, но даже они не работают.   -  person Peaceful    schedule 20.09.2017
comment
Ага, хорошо. Вы видите прошлые места в :jumps?   -  person Ingo Karkat    schedule 20.09.2017
comment
Я вижу только одну строку. Я думаю, это означает, что в регистре/памяти есть только одна запись.   -  person Peaceful    schedule 20.09.2017
comment
`` должно работать в вашем случае. Но это приведет вас только к последней позиции курсора. У @Ingo будет лучшее решение   -  person dlmeetei    schedule 20.09.2017
comment
Похоже, у вас есть vim-tiny, который по умолчанию используется в Ubuntu. Можешь попробовать sudo apt update && sudo apt install vim   -  person dlmeetei    schedule 20.09.2017
comment
Нет. Я вручную установил vim.   -  person Peaceful    schedule 23.09.2017
comment
@Peaceful, что именно ты спрашиваешь? Что вы имеете в виду под этим работает, пока я не закрою файл. Однако, когда я открываю его обратно, он забывает всю историю. У вас вообще работает <c-o>, или проблема только в том, что переходы не сохраняются, когда вы закрываете и снова открываете vim?   -  person swalladge    schedule 29.09.2017
comment
@swalladge: После того, как я закрыл и снова открыл vim, он не запоминает прыжки.   -  person Peaceful    schedule 29.09.2017
comment
@Peaceful, хорошо, проблема не в <c-o>, а в том, как установлена ​​настройка viminfo. Параметр viminfo должен иметь ', за которым следует число, чтобы сохранить список переходов между сеансами. Подробнее см. :h 'viminfo'. Если вы все еще застряли, опубликуйте вывод :set viminfo?. :)   -  person swalladge    schedule 29.09.2017
comment
Вывод :set vimiinfo?: `viminfo='100,‹50,s10,h`.   -  person Peaceful    schedule 29.09.2017


Ответы (1)


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

:help X1Mouse

The X1 and X2 buttons refer to the extra buttons found on mice.
The 'Microsoft Explorer' mouse has these buttons available to the right thumb.
Currently X1 and X2 only work on Win32 environments.

А также

:h M-Left
Alt-Left        Move cursor to the beginning of the previous word

М = альт.

Поместите это в свой vimrc. Сначала включите мышь:

set mouse=a
map <LeftMouse> <c-o>

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

person Andy Ray    schedule 29.09.2017
comment
Я поместил последнюю команду, которую вы сказали, в ~\.vimrc. Сил не работает. - person Peaceful; 29.09.2017
comment
Да; без двоеточия. - person Peaceful; 29.09.2017
comment
Интеграция мыши терминала Ubuntu и интеграция мыши vim, как правило, плохи из коробки, вам может понадобиться плагин терминала, чтобы отображать действия мыши для vim (вот почему версии vim с графическим интерфейсом, как правило, приятнее использовать). вы можете сначала попробовать сопоставить действие, не связанное с мышью, например, ключ, в качестве проверки работоспособности. Мое сопоставление в моем ответе правильно работает в Vim и делает то, что вы просите. - person Andy Ray; 29.09.2017
comment
Тут главное почему не работает? Он работает на моем рабочем столе с той же версией ОС и работал на моем ноутбуке с Ubuntu 14. - person Peaceful; 29.09.2017
comment
Обновил ответ. еще одна причина, почему версия с графическим интерфейсом намного лучше! - person Andy Ray; 05.10.2017
comment
Пробовал настроить мышь. Я думаю, что проблема более фундаментальна, потому что даже метки не работают в vim. Интересно, что все эти вещи работают на моем рабочем столе, где у меня такая же ОС и т. д. - person Peaceful; 05.10.2017
comment
Это отлично работает в Ubuntu, мы ничем не можем помочь без дополнительной информации. - person Andy Ray; 05.10.2017
comment
Я думаю, проблема в том, что viminfo не обновляется должным образом. Я не знаю почему. - person Peaceful; 05.10.2017
comment
Кажется, я решил проблему. У моего ~/.viminfo не было прав на чтение и запись (и vim не жаловался!). Комментарии ниже это помогло мне. - person Peaceful; 05.10.2017