VIM/TERMITE странное и некорректное поведение курсора/каретки

Данная проблема уже давно и в интернете я ничего по этой теме найти не смог. Вся проблема заключается в том, что курсор ,во время прокрутки в любую сторону(h j k l или теме же стрелками) после отпускания клавиши, продолжает двигаться как будто по инерции. Это сложно описать, но я постараюсь это сделать максимально подробно. Допустим хочу я перенестись куда-то вверх по файлу, зажимаю я как обычно k и каретка начинает ехать вверх. Все работает стабильно, ничего не лагает, но когда я отпускаю k, то курсор замирает на строке, на которой был в этот момент, а потом через некоторую задержку(где-то в секунду или чуть больше) "перепрыгивает" на следующую строчку(иногда на две сразу). Я называю это перемещением по инерции, потому что происходит это всегда в том направлении, в котором до этого двигалась каретка.

Такие "прыжки" случаются произвольно. То бишь курсор может встать сразу, когда я отпустил кнопку и больше не двигаться, а может и перескочить(там ситуация 50/50).

Выяснить из-за чего возникает такая ошибка у меня не получилось. Удалял .vimrc, запускал от root'a - ничего. Она просто есть и все. В других редакторах(qtcreator, mousepad) такого не наблюдается. Связанна эта херня конкретно с vim'ом или это чисто косяк терминала? Проблема дико бесячая и я совершенно не знаю с чем это может быть связанно, надеюсь, что кто-нибудь поможет, буду очень благодарен

В vimrc думаю смысла нет, ибо, как я уже писал, проблема явно не в нем. Я подумываю, что проблема может быть чисто в терминале, но в чем именно?

Систему переодически обновляю

shell - zsh
xorg
extra/vim 8.0.1176-1 [installed]
community/termite 12-2 [installed]

.zshrc
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/wh75er/.zshrc'

if [ -z "$DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ]; then
  exec startx
fi

autoload -Uz compinit
compinit
# End of lines added by compinstall

autoload -Uz promptinit
promptinit

PROMPT='%F{red}%n%f: %F{magenta}%~%f $ '

#feh --bg-fill ~/.wallpaper/14734387939130.jpg
./.fehbg

alias ls="ls --color"
wh75er
Связанна эта херня конкретно с vim'ом или это чисто косяк терминала?
Проверил у себя - такой баг не наблюдается. Для перемещения использовал как клавиши (j, k), так и стрелки. Поставил для интереса termite - баг не наблюдается.
Около года назад наблюдал близкую к этой проблему - после многократного ухода в suspend (более 5-7 раз) наблюдалась задержка в реакции клавиатуры - если быстро вводишь текст (или быстро перемещаешься по файлу), то текст (или премещаемый курсор) отображается с задержкой 1-2с, что очень доставало (лечилось перезапуском клавиатурного драйвера), но этот баг потом ушел сам после какого то обновления.
UPD 1 - shell - bash.
UPD 2 - заметил у тебя привязку клавиш к emacs - не проще вместо vim использовать emacs, если в нем этот баг не проявляется?
Ошибки не исчезают с опытом - они просто умнеют
В логах вряд ли что будет, но можно приаттачиться к vim и посмотреть вывод strace при перемещении верх/вниз по тексту открытого файла
- vim <file>
- pidof vim - 26707
- sudo strace -tt -p 26707
Вот мой нормальный кусок при перемещениях
18:41:40.911812 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
18:41:40.911900 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
18:41:40.912028 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
18:41:40.913207 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
18:41:40.913481 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
PS 1 - время покажет есть ли задержка
Ошибки не исчезают с опытом - они просто умнеют
vasek
заметил у тебя привязку клавиш к emacs - не проще вместо vim использовать emacs, если в нем этот баг не проявляется?
В emacs данного бага нет и там пашет все идеально и дико плавно, но привязку клавиш к emacs я испльзую по причине того, что в терминале дико неудобно использовать стрелочки на клавиатуре, так как они дико маленькие и ущербные, неудобно по ним попадать

vasek
shell - bash.
Раньше сидел на баше и данная проблема уже была(попробую сейчас сменить шелик, глянуть чего как на всякий)\
vasek
после многократного ухода в suspend (более 5-7 раз)
У меня данная проблема наблюдается сразу же после запуска системы
vasek
но можно приаттачиться к vim и посмотреть вывод strace при перемещении верх/вниз по тексту открытого файла
Так, сейчас шел сменю, проверю как будет работать, а потом пришлю strace
vasek, собственно я сейчас проверил и этот баг сохраняется и на баше, но вот в чем фишка. Если зайти в вим, не заходя в иксы, то он работает идеально, никаких перескоков не наблюдается, но после того, как захожу в иксы, все начинается снова. Может дело в иксах? Вот мой .xinitrc:
xset r rate 265 40
setxkbmap -option ctrl:swapcaps
exec spectrwm
xset r rate 265 40 думал, что может быть в этой строчке дело, но я пробовал ставить на дефолт значение, проблема оставалась

UPD вообще запустил иксы без нее. Дело не в быстрой скорости каретки. Даже когда я зажимаю j и перемещаюсь на две строчки при этом резко отпуская, перескок все равно осущевствляется. На такой нииизкой скорости это на столько сильно заметно, что хочется просто выпилиться.
vasek, хм, ну у меня явно не все гладко. Вот момент с запечатленным "прыжком"(перемещал курсор только в одну сторону):
22:59:30.665467 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.665560 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.665648 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.665737 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.665831 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.665923 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666011 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666099 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666192 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666282 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666399 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666487 write(1, "\33[?25l\33[12;1H\33[38;2;32;187;252m\33"..., 423) = 423
22:59:30.666615 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666759 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.666848 write(1, "\33[46;65H2,0-1", 13) = 13
22:59:30.667014 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.667111 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
22:59:30.667200 write(1, "\33[12;5H\33[?25h", 13) = 13
22:59:30.667299 select(1, [0], [], [0], {tv_sec=4, tv_usec=0}) = 0 (Timeout)

вот еще кусок:
23:02:39.290468 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.290563 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.290703 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.290796 write(1, "\33[?25l\33[m\33[38;2;229;230;230m\33[48"..., 295) = 295
23:02:39.290980 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291130 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291214 write(1, "\33[m\33[38;2;229;230;230m\33[48;2;33;"..., 54) = 54
23:02:39.291305 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291396 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291481 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291579 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:02:39.291674 write(1, "\33[21;36H\33[?25h", 14) = 14
23:02:39.291820 select(1, [0], [], [0], {tv_sec=4, tv_usec=0}) = 0 (Timeout)
23:02:43.297623 select(1, [0], [], [0], NULL

Вот при перемещении влево вправо:
23:04:55.232111 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.232191 write(1, "\33[15;28H\33[?25h", 14) = 14
23:04:55.232271 select(1, [0], [], [0], {tv_sec=4, tv_usec=0}) = 1 (in [0], left {tv_sec=3, tv_usec=984628})
23:04:55.247741 read(0, "l", 4096)      = 1
23:04:55.247824 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.247930 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.248204 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.248330 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.248456 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.248688 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.248913 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.249037 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.249185 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.249303 write(1, "\33[?25l\33[46;68H5", 15) = 15
23:04:55.249611 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.249750 select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
23:04:55.249868 write(1, "\33[15;29H\33[?25h", 14) = 14
23:04:55.249985 select(1, [0], [], [0], {tv_sec=4, tv_usec=0}) = 0 (Timeout)
23:04:59.254625 select(1, [0], [], [0], NULL

Я так понимаю всяких write/read быть не должно?
wh75er
Я так понимаю всяких write/read быть не должно?
У меня их не было, потому что я использовал команду sudo strace -tt -e select -p 26707 , отфильтровал по select, а тебе предложил полный вывод, на всякий случай. Вывод нормальный, ничего в нем криминального нет (в полном выводе у меня то же самое, так и должно быть).
У меня тоже spectrwm.
wh75er
Вот мой .xinitrc:
А вот это, мягко говоря, не совсем правильно (или привел не полный вывод?). На эту тему уже было несколько топиков. Привожу мой .xinitrc
cat .xinitrc
#!/bin/sh
#
if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/?*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi
#
setxkbmap -layout 'us,ru' -option 'grp:caps_toggle,grp_led:caps'
xset b off
exec spectrwm
Попробуй все таки изменить .xinitrc
UPD ... если тебе нравится vim и emacs и ты с ними в ладах, может попробовать exwm (WM на основе emacs)
PS 1
wh75er
Может дело в иксах?
Скорее всего так оно и есть.
Ошибки не исчезают с опытом - они просто умнеют
vasek
или привел не полный вывод?). На эту тему уже было несколько топиков. Привожу мой .xinitrc
Да, я приводил полный .xinitrc, сейчас попробую поменять и перезапуститься

Кстати, не знаю, что я такого сделал, но в этом запуске системы этот баг с вимом куда-то пропал 0_0. Сейчас сидел минут 10-ть, скролил файл. Он только один раз совершил "прыжок" из 100. Не знаю, что за прикол, но такое вроде как уже было. Сейчас посмотрим как будет себя вести после перезагрузки
vasek, я поменял свой .xinitrc:
#!/bin/sh
#
if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/?*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi
#

xset r rate 265 40
setxkbmap -option ctrl:swapcaps
exec spectrwm
Проблема по прежнему осталась, но я заметил, что она не ограничивается только вимом. В терминале такая же проблема. Допустим я зажимаю клавишу и у меня начинают принтится буквы, как только я отпускаю клавишу, возникает такой же прыжок, только он дописывает ту клавишу, которую я нажимал(например: ппппппппппп(остановка, секундная задержка)п )Ну а так же, если использовать emacs хоткеи, чтобы передвигать каретку в терминале, то тоже совершаются такие же скачки.
vasek
UPD ... если тебе нравится vim и emacs и ты с ними в ладах
в emacs я совсем плох, использую, как я уже писал, хоткеи, чтобы в терминале было удобнее работать. А на виме я новичек, поставил себе цель освоить даннаю програмку, да и писать там очень удобно, но с этой проблемой просто хочется себе глаза вырвать после часа или двух часов работы с ним, когда это все скачет, после каждого скролла

Мне советовали переставить просто систему, но мне не нравится такой расклад, что из-за какого-то бага придется сносить систему и ставить ее снова. Еще не факт, что это поможет

Мб дело связано все же с термитом? В других программах такой проблемы не наблюдается. Ни в браузере, ни в emacs том же, ни в qtcreator'e, но данная проблема есть в vim'e и в termite, через который, собственно, и открывается vim. Сейчас попробую другой терминал поставить и затестить
vasek, судя по всему трабл реально в termite, потому что на terminator'e все идеально работает без всяких пролагов. Но с чем может быть связано такое поведение термита?

UPD cat .config/termite/config:
 [colors]
# Base16 Eighties
# Author: Chris Kempson (http://chriskempson.com)

foreground      = #d3d0c8
foreground_bold = #e8e6df
cursor          = #e8e6df
background      = #6F4E4E

# 16 color space

# Black, Gray, Silver, White
color0  = #1c1c1c
color8  = #747369
color7  = #d3d0c8
color15 = #f2f0ec

# Red
color1  = #f2777a
color9  = #f2777a

# Green
color2  = #99cc99
color10 = #99cc99

# Yellow
color3  = #ffcc66
color11 = #ffcc66

# Blue
color4  = #6699cc
color12 = #6699cc

# Purple
color5  = #cc99cc
color13 = #cc99cc

# Teal
color6  = #66cccc
color14 = #66cccc

# Extra colors
color16 = #f99157
color17 = #d27b53
color18 = #393939
color19 = #515151
color20 = #a09f93
color21 = #e8e6df

[options]
font = Inconsolata 12

Пожалуй единственная вещь, которую я менял в термите

UPD2 снес термит, который стоял из community репозитория и поставил termite-git из aur. Проблема осталась
 
Зарегистрироваться или войдите чтобы оставить сообщение.