증거
대체 파일이 없기 때문에 실제로는 일반 ol '을 실행 중입니다 :bd
. 현재 버퍼를 삭제하고 ...없이 시도 #
하면 결과가 동일합니다. 비슷한 일이 함께 발생 :buffer
, :sbuffer
적어도 동의를 몇 다른 명령 #
인수로 : 그들은 자동으로 인수가 전달되지 않은 경우로 동작합니다.
같은 줄을 따라이 :bunload #
오류가 발생하면 : E90: Cannot unload last buffer
. :bunload
인수없이 실행 하면 다시 한 번 동일한 결과를 얻을 수 있습니다.
문서
따라서 우리는 #
"아무것도"(아마도 빈 문자열)로 대체되고 있다는 증거가 있습니다 . 여기서 어디로 가나 요? 이 동작에 대한 언급을 찾으려고 잠시 동안 도움말 파일을 둘러 보았습니다. 명시적인 것이 없었지만 :h cmdline-lines
(한두 페이지 아래로 스크롤) ...
파일 이름이 예상되는 위치에 문자 '%'또는 '#'이 사용되면 현재 및 대체 파일 이름으로 확장됩니다.
Vim #
이 expand()
함수 (즉 expand('#')
) 또는 적어도 동일한 기본 코드를 사용 했음을 읽었 습니다.
:h expand()
말한다 :
.. 특수 키워드를 확장하십시오. .. '%'또는 '#'을 사용할 때 현재 또는 대체 파일 이름이 정의되지 않은 경우 빈 문자열이 사용됩니다.
익숙한 것 같습니다.
코드
이제 위의 어느 것도 확실하지 않거나 이유에 대한 단서를 제공하지 않습니까? 그래서 코드를 파는 데 더 많은 시간을 보냈습니다 ... 내 C는 매우 녹슨 내가 어떤 좋은 도구가 설치되지 않은하지만 몇 가지 설정을하는 기능을 찾기 위해 관리 :bdelete
라는를 do_bufdel()
. 이를 통해 명령 줄 인수를 전송 buflist_findpat()
하는 경우, 어떤 #
, 반환 값을 발생한다 curwin->w_alt_fnum
. 이것이 대체 버퍼의 "버퍼 번호"입니다.이 시나리오에서는 양수 값이 될 수 없습니다. (반환 값이 선택되기 전에 alt 파일이 유효한지 / 존재하는지 확인할 수 없습니다.)
do_bufdel()
0보다 작은 버퍼 번호에 대한 반환 값에 대해 다시 체크 아웃됩니다 .이 경우 매개 변수 처리 루프가 중단됩니다. 그 결과 핵심 :bdelete
코드에 매개 변수가 표시되지 않습니다 ... 이것은 이전의 직관과 일치합니다.
무엇 향후 계획?
명확한 버그처럼 보이는 것을 보지 못하도록 설계된 것처럼 작동하는 것으로 보입니다. 그러나 간과 될 수있는 죄책감이있을 수 있습니다. 그러나 이것을 작성한 개발자 만이 확실합니다. 따라서 마지막 단계는 입력을 얻는 것입니다. 으로 기독교 B.는 상기 Vim은-DEV리스트에 물어가는 방법이다.
(주 buflist_findpat()
는 것을 가정하는 상상력의 스트레칭을 필요로하지 않을 수 있도록하는 유틸리티 함수입니다 :bunload
, :buffer
에 대한 공동의 행동을 설명 할 것 등을 사용하고, 너무 ... #
.)
NVIM v0.3.0-dev
.