Vim을 "tail -f"처럼 동작하게 만드는 방법은 무엇입니까?

Vim을 "tail -f"처럼 동작하게 만드는 방법은 무엇입니까?

Vim을 Even best 처럼 행동하게 만드는 방법이 있는지 궁금합니다 tail -f.
Vim 플러그인지금까지 내가 찾은 것은 내 기대에 부응하지 않습니다.

문서가 업데이트되는 것을 보고 싶습니다.실시간. 저는 제가 키보드에서 멀리 떨어져 있어도 Vim이 계속해서 버퍼를 다시 로드하고 마지막 줄로 점프하기를 원합니다.

어떻게 해야 하나요?
(일부 로그 파일의 크기가 매우 크기 때문에 전체 파일을 다시 로드하고 싶지 않습니다. 이렇게 마지막 몇 줄만 로드하는 것이 좋습니다 tail -f.)

답변1

당신은 자신을 와 의 조합 vim처럼 행동 하게 만들 수 없습니다 tail -f.lessvimtail -f

영원히 앞으로(따라가기) 모드

lessF누르 거나 매개변수로 전달하여 +F들어갈 수 있는 영원히 앞으로 모드가 있습니다 .

$ less +F

이 모드에서 동작은 파일 끝에 도달해도 읽기를 멈추지 않는 것과 less같습니다 . tail -f새로운 데이터로 파일을 지속적으로 새로 고칩니다. 이 모드를 종료하려면 를 누르세요 Ctrlc.

구문 강조

less읽은 데이터의 자동 필터링을 지원합니다. 라는 프로그램이 있습니다.강조된 소스기본적인 소스 코드 강조 표시를 수행할 수 있습니다. 와 잘 작동하는 도구가 함께 제공됩니다 less. 이를 사용하려면 LESSOPEN환경 변수를 적절하게 설정하기만 하면 됩니다.

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"

less또한 원시 터미널 이스케이프 시퀀스를 전달하라는 플래그를 전달 해야 합니다 (이 시퀀스는 터미널에 텍스트 색상 지정 방법을 알려줍니다) -R. less환경 변수를 설정하여 항상 플래그가 전달되는 척할 수 있습니다 .-RLESS

 export LESS=' -R '

언제 less충분하지 않습니까?

vi와 유사한 키 바인딩이 있지만 lessVim과는 다릅니다. 때때로 이질적인 느낌이 들며 ctags 통합 및 텍스트 편집 기능과 같은 중요한 기능이 부족합니다.

을 눌러 Vim이 현재 보고 있는 less파일을 호출 할 수 있습니다 . Vim의 정확한 위치에 커서를 놓을 수도 있습니다. Vim을 종료하면 다시 돌아올 자신을 발견하게 될 것입니다 . Vim을 사용하는 동안 파일을 변경하면 해당 내용이 .EDITOR=vimvlesslessless

답변2

짧고 너무 촌스럽지 않은 점이 마음에 듭니다. 필요할 때 ex(vim에서)에서 이 oneliner를 실행할 수 있습니다(또는 로그 파일을 열 때 사용할 각 명령을 vimrc에 넣을 수 있습니다).

:set autoread | au CursorHold * checktime | call feedkeys("lh")

(거의 파일 끝으로 이동하려면 피드키와 함께 "lh" 대신 "G"를 사용하면 됩니다.)

설명하다:

  • autoread: 외부에서 변경될 때 파일을 읽습니다. (하지만 자체적으로는 작동하지 않습니다. 내부 타이머 등이 ​​없습니다. vim이 ex 명령과 같은 작업을 수행할 때만 파일을 읽습니다.:!
  • CursorHold * checktime: 사용자가 지정된 시간 updatetime(기본값은 4000ms) 내에 커서를 이동하지 않을 때 실행 checktime, 파일 외부에서 변경 사항을 확인
  • call feedkeys("lh"): 커서가 오른쪽으로 한 번 이동한 다음 왼쪽으로 한 번 이동합니다. 그러면 아무 일도 일어나지 않습니다(...즉, CursorHold트리거되었다는 의미입니다.반지)

사용 중에 스크롤을 멈추려 call feedkeys("G"):set noautoreadvim에서 파일이 변경되었음을 알리고 변경 사항을 읽을 것인지 묻습니다.

나는 screen/tmux 없이 ssh 세션에서 작업할 때 tail -f 대신 vim에서 로그 파일을 보는 것을 좋아합니다. 또한 원하는 경우 로그 파일에서 직접 복사하거나 출력을 직접 저장하거나... vim으로 할 수 있는 모든 작업을 수행할 수 있습니다 :)

*따라서답변(답변을 참고하세요판하이광그리고 댓글우연)

답변3

vim --servername TAIL_VIM /tmp/somefile

이제 다른 쉘(예: bash)에서 다음을 수행할 수 있습니다.

while true
do
    inotifywait --event modify /tmp/somefile \
    && vim --servername TAIL_VIM --remote-send '<C-\><C-N>:edit!<CR>G';
done

<C-><CN>이 vim을 일반 모드로 강제 실행하면 "edit!"는 vim에게 현재 파일을 다시 로드하라고 지시하고(CR은 Enter 키를 누르는 것을 시뮬레이션합니다) G는 파일의 맨 아래로 이동합니다. (G)를 제거하면 입력이 들어올 때 파일을 더 쉽게 확인할 수 있습니다.

답변4

동일한 비재귀적 접근 방식:

cmap tailf<CR> call Tailf()<CR>
         function! Tailf()
    "Press C-c to stop tailing
        while 1
            e                                  
            normal G
            redraw
            sleep 1
        endwhile
    endfunction

관련 정보