回答:
これはおそらく名前を付けられるスクラッチバッファです。ヘルプから:
スクラッチ
いつでも破棄できるテキストが含まれています。ウィンドウを閉じるときに保持され、明示的に削除する必要があります。設定:>
: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
。
:edit
fileを使用してファイルを編集すると、新しいバッファが自動的に作成されます。空のバッファは、:enew
or :new
またはを入力して作成できます:vnew
。VimバッファーのFAQから:vim.fandom.com/wiki/Vim_buffer_FAQ
:helpgrep scratch
は、(私のインストールでは)10のうちの1つの結果としてそれを上げます。
この件に関する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
「スクラッチ」バッファーは、任意の一時的なコンテンツを入力する場所の非公式な用語にすぎません。
受け入れられた回答と別の質問に従って、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は文句を言い始めますが、それでもあなたは追加のものに終わります。
buftype=hide
前に設定した場合、バッファ名は「ファイル名のように処理される」ことがないため、ディレクトリを変更する必要はありません。また、言及する価値があるかもしれません'nobuflisted'
。これにより、バッファがの出力に表示されなくなります:ls
。あなたはそれにほのめかしたが、明示的には言及しなかった。
buftype=hide
確かにナンセンスです、そしてはい、私は実際に話しましたbuftype=nofile
:)。しかし、私はあなたが説明した振る舞いを再現することはできません、そしてそれでも声明Vim buffer names are always filenames
が間違っていると信じています。cd
関数から行を削除して実行した場合、ステータスラインまたは出力にパスがないため、echo bufname('%')
これはおそらくバッファ名ではなくステータスラインの問題なのでしょうか。あなたの'statusline'
オプションは何に設定されていますか?
statusline
ようなものを使用するように変更しますがexpand(&buftype == 'nofile' ? '%' : '%:p:~:h')
、今は個人的な好みの領域に入っていると思います。変更ディレクトリソリューションを使用する:lcd
ことにした場合は、問題のウィンドウへの変更を制限するために使用する方が良いかもしれませんが、これもあなた次第です。とにかく、これは素晴らしい答えだと思います。+1!
:h
このヘルプにアクセスするために使用したコマンドはどれですか?