Vim이 잠시 멈춥니다.

Vim이 잠시 멈춥니다.

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로 확인해 볼 수 있습니다.

기록 추적:

  1. 달리기:

    sudo trace-cmd record -e syscalls:* -f "common_pid==<pid of vim>" \
      -e sched:sched_switch -e sched:sched_wakeup -s 1000000
    
  2. 동결을 재현
  3. 녹음을 중지하려면 Ctrl-c를 사용하세요.

분석하다:

  1. 달리기:

    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
    
  2. 목록에서 볼 수 있듯이 select나 poll을 제외한 모든 시스템 호출은 짧습니다. "kernelshark" GUI를 사용하여 문제가 있는 시스템 호출 중에 무슨 일이 일어나고 있는지 조사할 수 있습니다. awk 출력의 두 번째 열은 추적의 시스템 호출 끝과 일치하는 타임스탬프입니다.

커널은 CONFIG_FTRACE_SYSCALLS로 컴파일되어야 합니다. Ubuntu에는 이 기능이 활성화되어 있지만 일부 다른 배포판에는 이 기능이 부족할 수 있습니다.

관련 정보