スクラッチウィンドウとは何ですか?


10

名前で開いているウィンドウが表示されることがあります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バッファー、次に「特殊な種類のバッファー」を読み取ります。あなたは正しい軌道に乗っていました。
wbogacz 2017

Vimコマンドのいずれかを使用してファイルを開くと、バッファーが自動的に作成されます。たとえば、:editfileを使用してファイルを編集すると、新しいバッファが自動的に作成されます。空のバッファは、:enewor :newまたはを入力して作成できます:vnew。VimバッファーのFAQから:vim.fandom.com/wiki/Vim_buffer_FAQ
NeilG

2
@wizzup :helpgrep scratchは、(私のインストールでは)10のうちの1つの結果としてそれを上げます。
リッチ

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は停止し、保存されていない変更で終了しようとするとプロンプトを表示しますバッファ)。

通常、スクラッチバッファーには、スクラッチ関数を呼び出すときに使用しているバッファーと同じ作業ディレクトリがあります。スクラッチバッファーの作業ディレクトリをホームに変更するためにコメントアウトされた行を含めました。これは、現在のディレクトリのパスをバッファパスとして表示するおかしなステータス行を持つ人のためのものです。またはそれを好む人のためだけに。

スクラッチバッファを「リスト」または「非リスト」(デフォルトではリスト)に設定できます。非公開にすると、:buffersリストには表示されませんが、には表示されます:buffers!nobuflistedリストに含めない場合は、コメントを外します。リストされているかリストされていないかにかかわらず、いつでもスクラッチバッファーにいつでも変更できます:b scratch。リストにあるスクラッチバッファを作成すると、少しアクセスしやすくなります。たとえば:sball、分割に含めます。

:bwスクラッチバッファーで(バッファーワイプ)を使用すると、Vimはコンテンツを削除し、警告なしにバッファーを削除します。:bdスクラッチバッファーで(バッファーの削除)を使用すると、Vimは警告なしにコンテンツをドロップし、バッファーをリストから外します。

あなたはできる複数のスクラッチバッファを作成します。Vimは文句を言い始めますが、それでもあなたは追加のものに終わります。


2
死刑執行は必要ありません。あなたの関数は単に新しいものを実行することができます
D.ベンノーブル

1
名前を設定するbuftype=hide 前に設定した場合、バッファ名は「ファイル名のように処理される」ことがないため、ディレクトリを変更する必要はありません。また、言及する価値があるかもしれません'nobuflisted'。これにより、バッファがの出力に表示されなくなります:ls。あなたはそれにほのめかしたが、明示的には言及しなかった。
リッチ

コメントをありがとう、@ D.BenKnoble。私はあなたの助言に基づいて機能を整理しました。
NeilG

1
buftype=hide確かにナンセンスです、そしてはい、私は実際に話しましたbuftype=nofile:)。しかし、私はあなたが説明した振る舞いを再現することはできません、そしてそれでも声明Vim buffer names are always filenamesが間違っていると信じています。cd関数から行を削除して実行した場合、ステータスラインまたは出力にパスがないため、echo bufname('%')これはおそらくバッファ名ではなくステータスラインの問題なのでしょうか。あなたの'statusline'オプションは何に設定されていますか?
リッチ

1
ああ!理解できてよかった!それが私だったとしても、スクラッチ機能のディレクトリを変更したくないので、代わりにのstatuslineようなものを使用するように変更しますがexpand(&buftype == 'nofile' ? '%' : '%:p:~:h')、今は個人的な好みの領域に入っていると思います。変更ディレクトリソリューションを使用する:lcdことにした場合は、問題のウィンドウへの変更を制限するために使用する方が良いかもしれませんが、これもあなた次第です。とにかく、これは素晴らしい答えだと思います。+1!
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.