vimrc 파일을 어떻게 디버깅합니까?


80

나는 빔에 문제가 있고, 나는 내에있을 수 있습니다 생각 vimrc파일 (또는 한 은 내 수 vimrc파일).

이것을 어떻게 확인합니까? 이 경우 입니다vimrc파일을 어떻게 어디에 어떻게 알 수 있습니까 정확히 문제가있다?

답변:


79

가장 먼저 할 일은 기본 설정으로 Vim을 시작하는 것입니다.

vim -u NONE -U NONE -N

-u NONE당신의 vimrc를로드에서 방지 빔은, -U NONE당신의 gvimrc로드에서 빔을 방지하고, -N더 호환 모드를 사용하지 않으려면 빔을 알려줍니다 (이 필요하지 않습니다,하지만 대부분의 빔의 사용자는 "호환"모드에 사용되지 않음). 이 있습니다 NONE되어 필요한 모든 대문자로.

Windows에서는 새 바로 가기를 만들어이 플래그를 추가 할 수 있습니다 1 .

  • 문제가 남아 있다면, 당신은 그것을 알고 하지 귀하의 vimrc 뭔가.

  • 문제가 사라지면 vimrc 파일에 문제가 있는 것 입니다.

내 vimrc가 아닙니다!

만세! 가서 질문하십시오. vimrc 파일없이 Vim을 시작했다고 언급하십시오!

그래서 그것은 내 vimrc입니다, 지금 무엇?

아직 vimrc 파일의 백업 사본을 저장하지 않으려는 경우가 있습니다.

플러그인 확인

다음으로 할 일은 먼저 모든 플러그인을 비활성화하는 것입니다. Vim에서는 플러그인이 상당히 변경 될 수 있습니다. 이 방법으로 문제가 해결되는 경우, 다음 찾으려고 하는 그들에게 하나씩을 다시 활성화하여 플러그인을. 어떤 플러그인이 문제를 일으키는 지 정확히 알고 나면이 플러그인의 설명서를 읽거나 태그가 붙은 질문을하여 문제를 해결하고 해결할 수 있습니다 plugin-<name>.

그것이 있다면 하지 플러그인, 당신이없는 어떤 문제를 일으키는 어떤 아이디어를, 다음은 시행 착오의 과정입니다. vimrc에서 하나 이상의 라인을 주석 처리하고, Vim을 시작하고, 문제가 발생하는지 확인한 후, 문제가 발생하지 않을 때까지이 절차를 반복하십시오. 가장 빠른 방법은 다음과 같습니다.

  1. vimrc 파일의 절반에 대해 주석 처리 (또는 제거)하십시오.
  2. 빔을 다시 시작하거나 새 빔을 열합니다 (의 vimrc를 다시로드 것은 없는 설정이 해제 아니기 때문에, 충분).
  3. 문제가 해결 되었습니까? 제거한 부분을 다시 넣고 (Vim을 열어두고 실행 취소를 사용하는 것이 유용함) 다시 추가 한 부분에서 1 단계를 반복하십시오.
  4. 문제가 계속 발생합니까? 1 단계로 이동하십시오.

결국에는 단일 옵션 또는 문제를 일으키는 몇 가지 옵션의 조합이 있어야합니다. 다음을 사용하여 Vim의 모든 옵션에 대해 자세히 알아볼 수 있습니다.

:help 'option_name'

따옴표는 여기서 중요하며 일반적으로 따옴표 없이 작동하지만 생략하면 잘못된 페이지가 표시되는 경우가 있습니다.

도움말 페이지를 읽은 후에도 여전히 혼란 스러우면 질문 할 위치를 알고 있습니다. ;-)

단일 플러그인 디버깅

하나의 플러그인을 분리하고, 아마도 그것에 대해 질문하고 싶다면, 가능한 한 적게 로드 하지만 여전히 플러그인 을로드하려고합니다 . Vim의 패키지 기능으로이를 쉽게 수행 할 수 있습니다. 이를 위해서는 Vim 8 또는 최신 버전의 Neovim이 필요합니다.

  1. 비어있는 새 디렉토리를 작성하십시오. ~/plugin이 예 에서는 경로를 사용합니다 . 이제 플러그인을 일반 pack/plugins/start/$name디렉토리 에 넣으십시오 . 예를 들면 다음과 같습니다.

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. test-vimrc다음 내용 으로 파일을 작성하십시오 . 이를 통해 Vim은 ~/plugin디렉토리가 아닌 디렉토리 에서 플러그인을로드 합니다 ~/.vim .

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. 다음과 같이 Vim을 시작하십시오.

    vim -U NONE -u ~/test-vimrc
    

    이제이 단일 플러그인으로 최소한의 vimrc를 갖게되었습니다.


각주

1 예를 들어 : 64 비트 Windows에서 바로 가기는 다음과 같습니다 "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N.. 파일 탐색기에서 바로 가기를 원하는 위치를 마우스 오른쪽 단추로 클릭 한 다음 새로 작성-> 바로 가기를 선택하고 바로 가기 텍스트를 붙여 넣으십시오. Vim이 다른 위치에 설치된 경우 Vim 경로를 변경해야 할 수도 있습니다.


7
이 기술을 이진 검색 오류 현지화 라고 합니다.
tommcdo

2
버그를 알아 낸 후에는 .vimrc를 버전 관리 상태로 유지하기 시작하는 것이 좋습니다.
escrafford

1
가있는 -U NONE경우 필요하지 않습니다 -u NONE.
Antony

@MartinTournoij 나는 처음 읽는 사람이 이해하기 쉽도록 편집제안했습니다 . 나는 그것을 좋아하면 좋겠. 감사!
jpaugh

1
감사합니다 @jpaugh; 나는 질서가 더 의미가 있다고 생각합니다.
Martin Tournoij

31

-D스크립트에서 첫 번째 명령을 실행 한 후 디버깅 모드로 이동합니다 디버깅을 위해 특별히 빔 매개 변수.

예를 들어 플러그인없이 디버그 모드에서 Vim을 실행하려면 다음과 같이 실행하십시오.

vim --noplugin -D

n/ next를 입력 하여 다음 줄을 구문 분석하고을 계속 누릅니다 Enter.

그리고 contq다시 이동합니다 vim인터페이스.

GUI 버전을 사용하는 경우 guivimrc에 명령을 넣어 해당 명령 바로 다음에 디버깅을 시작하십시오.

사용 가능한 명령 목록을 보려면 Ctrl+ d를 누르십시오

더 읽어보기 :


1
이는 .vimrc 파일에서 오류 메시지를 발생시킨 간단한 실수를 찾는 데 가장 도움이되었습니다. 빠른 시간에 이것을 시도해 볼 가치가 있습니다.
RichVel

1
@ kenorb이 명령은 놀랍습니다. 다른 편집자로 가지 않아도됩니다.
TheLazyChap

11

이미 언급했듯이 먼저 vim -u NONE -U NONE -N바닐라 독이 제대로 작동하는지 확인하십시오.

그런 다음 vim을 정상적으로 시작하고 확인하십시오.

:messages

문제 후 vim 내부에서 모든 경고와 오류가 표시됩니다.

마지막으로 다음 명령으로 vim을 시작하십시오.

vim -V9logfile.log

이는라는 로그 파일을 만듭니다 logfile.log, -V9로깅 수준이며 문제를 재현 해 봅니다.


11

한 가지 더 팁 : 원시인처럼 보일 수 있습니다. : echom "message"를 내 .vimrc에 추가하여 실행중인 것과 그렇지 않은 것을 확인하고 싶습니다.

예를 들어

if executable('ag')
  :echom "AG FOUND"

  ...
endif

if 블록이 실행되고 있는지 등을 빠르게 확인할 수 있습니다. 다음에 vim을 시작할 때 메시지가 콘솔에 인쇄됩니다.


6
그리고 echom다른 흥미로운 명령 을 사용 :messages하면 메시지의 전체 로그를 에코하는 것입니다. 시작 후 그것들을 보는 것이 때때로 유용 할 수 있습니다.
statox

이것은 거의 내가 필요한 것입니다. cpoptions의 값이 vimrc의 어느 지점에 있는지 확인하고 싶습니다. ": set cpoptions"의 출력을 어떻게 에코합니까? ?
Mike Lippert

10

내가 찾은 것 중 하나는 부분을 토글하는 변수 모음을 유지하여 .vimrc내용을 주석 처리하지 않고도 부분을 비활성화하거나 활성화 할 수 있다는 것입니다. 또한 당신이 당신의 조직에 대해 생각하도록 강요하는 유쾌한 부작용이 있습니다 .vimrc.

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

다음은 보호하는 섹션의 예입니다 if.

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

내 vimrc 로딩 시간은 약 400ms로 매우 느 렸으며이 줄을 제거해야만 20ms로 줄였습니다.

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

그런 외부 명령에 대한 호출이 없는지 확인하십시오.


1
사이트에 오신 것을 환영합니다! 이것은 유용한 tidbit이지만 매우 일반적인 질문보다 더 구체적입니다. 예를 들어이 질문에 대한 답변으로 추가하는 것이 더 좋을 수도 있고 , 지식을 공유하려는 경우 자신의 질문에 대답하고 대답 할 수 있습니까?
Rich

0

다음은 시작하기위한 간단한 절차입니다.

  1. 전체 .vimrc 파일의 내용을 주석 처리하십시오
  2. :source %또는 을 실행하여 .vimrc를 다시로드하십시오.:so $MYVIMRC
  3. 파일의 신중한 부분을 주석 해제하십시오 (일반적으로 맨 위에서 시작)
  4. 오류를 찾을 때까지 2 단계와 3 단계를 반복하십시오.
  5. 오류를 수정하십시오.

1
이 답변은 대문자와 문장 부호를 올바르게 사용하면 훨씬 나을 수 있습니다.

이진 검색으로이 작업을 수행하는 것이 좋습니다.
D. Ben Knoble
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.