스크래치 창이 란 무엇입니까?


10

때로는 name으로 열린 창이 나타납니다 scratch.

나는 그것이 일종의 임시 버퍼 / 창이라는 것을 알고있다.

상자를 어떻게 만들 수 있습니까?

:h scratch 아무것도 반환하지 않습니다.

답변:


11

스크래치 버퍼 일 수 있으며 이름을 지정할 수 있습니다. 도움에서 :

할퀴다

언제든지 버릴 수있는 텍스트를 포함합니다. 창을 닫을 때 유지되며 명시 적으로 삭제해야합니다. 설정 :>

      :setlocal buftype=nofile
      :setlocal bufhidden=hide
      :setlocal noswapfile
  The buffer name can be used to identify the buffer, if you give it a meaningful name.

에서 찾을 수 있습니다 :help special-buffers.


1
:h이 도움말에 액세스하는 데 사용 된 명령은 무엇입니까?
wizzup

2
: h buffer 다음 "Special kind of buffers"를 읽습니다. 당신은 올바른 길을 가고있었습니다.
wbogacz

Vim 명령을 사용하여 파일을 열면 버퍼가 자동으로 생성됩니다. 예를 들어, :edit파일을 사용하여 파일을 편집하면 새 버퍼가 자동으로 작성됩니다. 비어있는 버퍼는 입력하여 생성 될 수있다 :enew거나 :new또는 :vnew. Vim 버퍼 FAQ에서 : vim.fandom.com/wiki/Vim_buffer_FAQ
NeilG

2
@wizzup :helpgrep scratch은 (내 설치에서) 10 개의 결과 중 하나로 표시합니다.
Rich

2

주제에 대한 vim 팁 (vim.wikia로 마이그레이션 됨)을 기억합니다.

스크래치 버퍼를 만드는 데 사용하는 최신 버전의 함수도 설정합니다.

  • 'buflisted' 거짓으로
  • 'readonly'

(내 VimL 라이브러리 플러그인에서 : lh-vim-lib)

function! lh#buffer#scratch(bname, where) abort
  try
    set modifiable
    " The next function takes care of working around this damn E36
    call lh#window#create_window_with(a:where.' sp '.escape(substitute(a:bname, '\*', '...', 'g'), '#%'))
  catch /.*/
    throw "Can't open a buffer named '".a:bname."'!"
  endtry
  setlocal bt=nofile bh=wipe nobl noswf ro
  return bufnr('%')
endfunction

2

'스크래치'버퍼는 임의의 임시 컨텐츠를 입력하는 장소에 대한 비공식 용어입니다.

허용 된 답변과 다른 질문에 따라 vimrc에서 다음 기능을 만들었습니다.

이 함수는 현재 창에 빈 버퍼를 만들고 이름을 '스크래치'로 지정합니다. 종료하려고하면 스크래치 버퍼가 보호되지 않습니다. Vim을 종료하거나 초기화하면 저장하지 않은 변경 사항이 있더라도 메시지가 표시되지 않고 폐기됩니다 ( :bw).

이 기능을 vimrc에 넣으십시오. 스크래치 버퍼를 만들려면을 사용하십시오 :call Scratch().

function! Scratch()
    split
    noswapfile hide enew
    setlocal buftype=nofile
    setlocal bufhidden=hide
    "setlocal nobuflisted
    "lcd ~
    file scratch
endfunction

라인을 잡아 당겨서 이것을 빠르게 테스트 할 수 있습니다 :@". 그런 다음 시도해 볼 수 있습니다 :call Scratch().

스크래치 버퍼를 만들 때 현재 버퍼가 영향을받지 않도록 분할이 사용됩니다.

split스크래치 버퍼를 만들 때 (함수에서 생략하는 것을 선호하면 현재 버퍼는 더 이상 창에 표시되지 않습니다.) Vim은 여전히 ​​저장하지 않고 변경 사항을 저장하지 않으면 종료하라는 메시지를 표시합니다. 완충기).

스크래치 버퍼는 일반적으로 스크래치 함수를 호출 할 때 사용하는 버퍼의 작업 디렉토리와 동일합니다. 스크래치 버퍼 작업 디렉토리를 홈으로 변경하기 위해 주석 처리 된 행을 포함 시켰습니다. 이것은 현재 디렉토리의 경로를 버퍼 경로로 표시 할 수있는 상태 표시 줄이 이상한 사람들을위한 것입니다. 또는 그것을 선호하는 사람들을 위해.

스크래치 버퍼를 "listed"또는 "unlisted"(기본적으로 나열 됨)로 설정할 수 있습니다. 목록에없는 경우 목록에 표시되지 :buffers않지만에 :buffers!있습니다. nobuflisted목록에없는 것을 선호하면 해당 줄의 주석을 해제하십시오 . 나열되거나 나열되지 않은 경우 언제든지 스크래치 버퍼로 변경할 수 있습니다 :b scratch. 스크래치 버퍼를 나열하면 약간 더 쉽게 액세스 할 수 있습니다. 예를 들어 :sball분할에 포함시킬 것입니다.

당신이 사용하는 경우 :bw내용을 삭제하고 경고없이 버퍼를 제거 빔 버퍼 스크래치에 (버퍼 닦아). 당신이 사용하는 경우 :bd빔 버퍼 스크래치에 (삭제 버퍼) 경고없이 내용을 삭제하고 버퍼가 목록에없는 것.

여러 스크래치 버퍼를 만들 수 있습니다 . Vim은 불평하기 시작하지만 여전히 추가 질문으로 끝납니다.


2
실행은 필요하지 않습니다. 당신의 기능은 단지 새로운 등을 실행할 수 있습니다.
D. Ben Knoble

1
이름을 설정 buftype=hide 하기 전에 설정하면 버퍼 이름이 "파일 이름처럼 처리되지"않기 때문에 디렉토리를 변경할 필요가 없습니다. 또한 'nobuflisted'버퍼의 출력에 버퍼가 표시되지 않도록하는 것을 언급 할 가치가 있습니다 :ls. 당신은 그것에 대해 암시하지만 명시 적으로 언급하지 않았습니다.
Rich

귀하의 의견에 감사드립니다, @ D.BenKnoble. 귀하의 조언에 따라 기능을 정리했습니다.
NeilG

1
buftype=hide실제로 말도 안되는 말입니다. 예, 실제로 이야기했습니다 buftype=nofile:). 그러나 나는 당신이 묘사 한 행동을 재현 할 수 없으며 여전히 진술 Vim buffer names are always filenames이 잘못 되었다고 생각합니다 . cd함수 에서 줄을 제거한 다음 실행하면 내 상태 표시 줄이나 출력 결과에 경로가 없습니다 echo bufname('%'). 버퍼 이름이 아닌 상태 표시 줄에 문제가 있는지 궁금합니다. 'statusline'옵션 이 무엇으로 설정되어 있습니까?
Rich

1
아하! 우리가 알아 낸 것이 기쁘다! 그것이 나이라면, 나는 여전히 스크래치 기능에서 디렉토리를 변경하지 않는 것을 선호하므로 대신 statusline을 사용하도록 변경 하려고 expand(&buftype == 'nofile' ? '%' : '%:p:~:h')하지만 지금은 개인 취향의 영역에 있다고 생각합니다. 변경 디렉토리 솔루션을 고수하기로 결정했다면 :lcd변경 사항을 해당 창으로 제한하는 것이 더 나을 수도 있지만 다시 한 번 귀하에게 달려 있습니다. 어쨌든 이것이 좋은 대답이라고 생각합니다. +1!
Rich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.