버퍼의 파일 경로를 얻는 방법은 무엇입니까?

버퍼의 파일 경로를 얻는 방법은 무엇입니까?

나는 % 레지스터에 현재 버퍼의 전체 경로가 포함되어 있다는 것을 알고 있습니다. 하지만 다른 버퍼의 전체 경로를 해당 번호로 얻는 방법은 무엇입니까?

VIM에 그러한 기능/명령이 있습니까?

제가 이 질문을 어떻게 생각해냈는지 설명하고 싶습니다.

2개의 버퍼가 열려 있습니다. 첫 번째는 왼쪽 창의 XML 파일이고 다른 하나는 오른쪽 창의 XSD 파일입니다. 나는 그것을 편집했습니다. 편집하는 동안 스키마에 대해 XML의 유효성을 검사하고 싶습니다.

그러나 주문은

!xmllint --schema /tmp/schema.xsd %

물론 이는 현재 버퍼가 XML을 포함하는 경우에만 작동합니다. 그래서 /tmp/schema.xsd버퍼 번호로 전체 경로를 결정할 수 있는 일부 명령이나 함수 호출로 대체 할 수 있는지 궁금합니다 . 그것은 다음과 같습니다:

!xmllint --schema getBufferPath(3) %

답변1

expand()통화를 이용하시면 됩니다 . 예를 들어

:echo expand("#2:p")

버퍼 #2에 있는 파일의 전체 경로를 인쇄합니다. 다음을 사용하여 모든 버퍼를 나열할 수 있습니다.:ls

다른 수식어와 다른 키워드를 사용할 수 있습니다(전체 정보는 페이지 참조 :help expand()).

다음은 간략하게 발췌한 내용입니다.

           When {expr} starts with '%', '#' or '<', the expansion is done
            like for the cmdline-special variables with their associated
            modifiers.  Here is a short overview:

                   %               current file name
                    #               alternate file name
                    #n              alternate file name n
                    <cfile>         file name under the cursor
                    <afile>         autocmd file name
                    <abuf>          autocmd buffer number (as a String!)
                    <amatch>        autocmd matched name
                    <sfile>         sourced script file name
                    <slnum>         sourced script file line number
                    <cword>         word under the cursor
                    <cWORD>         WORD under the cursor
                    <client>        the {clientid} of the last received
                                    message server2client()
            Modifiers:
                    :p              expand to full path
                    :h              head (last path component removed)
                    :t              tail (last path component only)
                    :r              root (one extension removed)
                    :e              extension only

           Example:
                    :let &tags = expand("%:p:h") . "/tags"
            Note that when expanding a string that starts with '%', '#' or
            '<', any following text is ignored.  This does NOT work:
                    :let doesntwork = expand("%:h.bak")
            Use this:

관련 정보