vim에서 작업할 때 (종종) 1~2초 정도 멈췄다가 다시 정상으로 돌아가서 멈춘 동안 입력한 모든 내용을 실행합니다.
새로 설치한 후 두 개의 서로 다른 Ubuntu 시스템에서 이 동작을 보았습니다. 추가 플러그인도 없고 화려한 구성도 없습니다.
어떤 아이디어가 있나요?
답변1
확실하게 하다자동 읽기기능이 비활성화되었습니다. 이로 인해 귀하가 설명하는 것과 유사한 일시적인 정지가 발생할 수 있습니다.
파일이 편집되는 디렉토리가 아닌 다른 디렉토리에 .swp 파일을 배치할 수도 있습니다. vim에서 파일을 연 후 편집하기 전에 다음을 실행하십시오.
:set dir=/tmp
:vi
이것이 작동하면 기본 .swp 파일 위치에 추가하여 수정할 수 있습니다.~/.vimrc
set dir=/tmp
답변2
저에게는 vim이 fsync를 호출하여 데이터 손실을 방지하기 위해 디스크에 기록된 데이터가 캐시되지 않도록 할 때 정지가 발생합니다. 상황을 개선하기 위한 옵션:
- 대기 시간이 짧은 더 나은 HD를 구매하세요.
- 대기 시간을 숨기기 위해 비동기 IO 또는 IO 스레드를 사용하도록 vim을 수정했습니다.
귀하의 문제가 fsync에 있는지 모르겠습니다. ftrace로 확인해 볼 수 있습니다.
기록 추적:
달리기:
sudo trace-cmd record -e syscalls:* -f "common_pid==<pid of vim>" \ -e sched:sched_switch -e sched:sched_wakeup -s 1000000
- 동결을 재현
- 녹음을 중지하려면 Ctrl-c를 사용하세요.
분석하다:
달리기:
trace-cmd report -F "syscalls : common_pid == <pid of vim>" | sed 's/://' \ | awk '{time = 0; if ($4 == "sys_exit:") time=$3-prev_time; prev_time=$3; \ printf "%6.6f %6.6f %s %s %s %s %s\n", time, $3, $4, $5, $6, $7, $8}' \ | sort -n
- 목록에서 볼 수 있듯이 select나 poll을 제외한 모든 시스템 호출은 짧습니다. "kernelshark" GUI를 사용하여 문제가 있는 시스템 호출 중에 무슨 일이 일어나고 있는지 조사할 수 있습니다. awk 출력의 두 번째 열은 추적의 시스템 호출 끝과 일치하는 타임스탬프입니다.
커널은 CONFIG_FTRACE_SYSCALLS로 컴파일되어야 합니다. Ubuntu에는 이 기능이 활성화되어 있지만 일부 다른 배포판에는 이 기능이 부족할 수 있습니다.