Antworten:
Es ist wahrscheinlich ein Arbeitspuffer, der benannt werden kann. Aus der Hilfe:
kratzen
Enthält Text, der jederzeit verworfen werden kann. Es bleibt beim Schließen des Fensters erhalten, es muss explizit gelöscht werden. Einstellungen:>
: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.
Dies kann in gefunden werden :help special-buffers
.
:edit
Datei zum Bearbeiten einer Datei verwenden, wird automatisch ein neuer Puffer erstellt. Ein leerer Puffer kann durch Eingabe von :enew
oder :new
oder erstellt werden :vnew
. Von Vim Buffer FAQ: vim.fandom.com/wiki/Vim_buffer_FAQ
:helpgrep scratch
es als eines von 10 (in meiner Installation) Ergebnissen an.
Ich erinnere mich an einen vim-Tipp (der auf vim.wikia migriert wurde) zu diesem Thema.
Die neueste Version der Funktion, die ich zum Erstellen von Arbeitspuffern verwende, setzt außerdem:
'buflisted'
zu falsch'readonly'
(Aus meinem VimL-Bibliotheks-Plugin: 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
Ein "Scratch" -Puffer ist nur ein informeller Begriff für einen Ort, an dem beliebige temporäre Inhalte eingegeben werden können.
Nach der akzeptierten Antwort und einer weiteren Frage habe ich die folgende Funktion in meinem vimrc erstellt.
Die Funktion erstellt im aktuellen Fenster einen leeren Puffer und nennt ihn "Scratch". Der Arbeitspuffer ist nicht geschützt, wenn Sie versuchen, ihn zu beenden. Es wird auch bei nicht gespeicherten Änderungen ohne Aufforderung verworfen, wenn Sie Vim beenden oder es löschen ( :bw
).
Fügen Sie diese Funktion in Ihr vimrc ein. Verwenden Sie zum Erstellen eines Arbeitspuffers :call Scratch()
.
function! Scratch()
split
noswapfile hide enew
setlocal buftype=nofile
setlocal bufhidden=hide
"setlocal nobuflisted
"lcd ~
file scratch
endfunction
Sie können dies schnell testen, indem Sie an den Linien ziehen und dann :@"
. Sie können es dann versuchen :call Scratch()
.
Ein Split wird verwendet, damit Ihr aktueller Puffer beim Erstellen des Arbeitspuffers nicht beeinflusst wird.
(Wenn Sie split
die Funktion lieber weglassen möchten, wird Ihr aktueller Puffer beim Erstellen des Arbeitspuffers "ausgeblendet" (nicht mehr in einem Fenster). Vim stoppt weiterhin und fordert Sie auf, wenn Sie versuchen, mit nicht gespeicherten Änderungen daran zu beenden Puffer).
Der Arbeitspuffer hat normalerweise das gleiche Arbeitsverzeichnis wie der Puffer, in dem Sie sich befinden, wenn Sie die Kratzfunktion aufrufen. Ich habe eine auskommentierte Zeile eingefügt, um das Arbeitsverzeichnis des Arbeitspuffers in "Home" zu ändern. Dies ist für diejenigen mit lustigen Statuszeilen, die möglicherweise den Pfad des aktuellen Verzeichnisses als Pufferpfad anzeigen. Oder nur für diejenigen, die es bevorzugen.
Sie können den Arbeitspuffer so einstellen, dass er "aufgelistet" oder "nicht gelistet" ist (standardmäßig aufgelistet). Wenn Sie es nicht gelistet machen, wird es nicht in Ihrer :buffers
Liste angezeigt , aber es wird angezeigt :buffers!
. Kommentieren Sie die nobuflisted
Zeile aus, wenn Sie möchten, dass sie nicht aufgeführt wird. Gelistet oder nicht gelistet, können Sie :b scratch
trotzdem jederzeit zu Ihrem Arbeitspuffer wechseln . Wenn Sie den Scratch-Puffer auflisten, ist er etwas leichter zugänglich. Zum Beispiel :sball
wird es in einem Split enthalten.
Wenn Sie :bw
(Pufferlöschung) für den Arbeitspuffer verwenden, löscht Vim den Inhalt und entfernt den Puffer ohne Vorwarnung. Wenn Sie :bd
(Puffer löschen) für den Arbeitspuffer verwenden, löscht Vim den Inhalt ohne Warnung und macht den Puffer nicht aufgelistet.
Sie können mehrere Arbeitspuffer erstellen. Vim fängt an sich zu beschweren, aber Sie haben immer noch zusätzliche.
buftype=hide
vor dem Festlegen des Namens festlegen , ist das Ändern des Verzeichnisses nicht erforderlich, da der Puffername nicht "wie ein Dateiname behandelt" wird. Erwähnenswert ist auch 'nobuflisted'
, dass der Puffer nicht in der Ausgabe von angezeigt wird :ls
. Sie haben irgendwie darauf angespielt, es aber nicht explizit erwähnt.
buftype=hide
ist in der Tat Unsinn, und ja, ich habe tatsächlich darüber gesprochen buftype=nofile
:). Aber ich kann das von Ihnen beschriebene Verhalten nicht reproduzieren und glaube immer noch, dass die Aussage Vim buffer names are always filenames
falsch ist. Wenn ich die cd
Zeile aus Ihrer Funktion entferne und sie dann ausführe, gibt es keinen Pfad in meiner Statuszeile oder in der Ausgabe von echo bufname('%')
Ich frage mich, ob dies möglicherweise eher ein Problem mit Ihrer Statuszeile als mit dem Puffernamen ist. Was ist Ihre 'statusline'
Option eingestellt?
statusline
etwas wie verwenden expand(&buftype == 'nofile' ? '%' : '%:p:~:h')
, aber ich denke, jetzt befinden wir uns in den Bereichen persönlicher Vorlieben. Wenn Sie sich für die Lösung des Änderungsverzeichnisses entscheiden, ist es möglicherweise besser, :lcd
die Änderungen auf das betreffende Fenster zu beschränken, aber auch dies liegt ganz bei Ihnen. Jedenfalls denke ich, dass dies eine großartige Antwort ist. +1!
:h
Befehl verwendet, um auf diese Hilfe zuzugreifen?