Risposte:
Probabilmente è un buffer di memoria virtuale, che può essere nominato. Dall'aiuto:
graffiare
Contiene testo che può essere scartato in qualsiasi momento. Viene mantenuto alla chiusura della finestra, deve essere eliminato in modo esplicito. Impostazioni:>
: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.
Questo può essere trovato in :help special-buffers
.
:edit
file per modificare un file, viene automaticamente creato un nuovo buffer. È possibile creare un buffer vuoto inserendo :enew
o :new
o :vnew
. Dalle domande frequenti sul buffer Vim: vim.fandom.com/wiki/Vim_buffer_FAQ
:helpgrep scratch
lo mostra come uno dei 10 risultati (nella mia installazione).
Ricordo un suggerimento di vim (che è stato migrato su vim.wikia) sull'argomento.
L'ultima versione della funzione che utilizzo per creare buffer di memoria virtuale imposta anche:
'buflisted'
a falso'readonly'
(Dal mio plugin della libreria 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
Un buffer "scratch" è solo un termine informale per indicare un luogo in cui inserire contenuti temporanei arbitrari.
Dopo la risposta accettata e un'altra domanda, ho creato la seguente funzione nel mio vimrc.
La funzione crea un buffer vuoto nella finestra corrente e lo chiama 'scratch'. Il buffer di memoria virtuale non è protetto se si tenta di uscire. Verrà scartato senza richiedere conferma anche con modifiche non salvate se si esce da Vim o lo si cancella ( :bw
).
Inserisci questa funzione nel tuo vimrc. Per creare un buffer di memoria virtuale utilizzare :call Scratch()
.
function! Scratch()
split
noswapfile hide enew
setlocal buftype=nofile
setlocal bufhidden=hide
"setlocal nobuflisted
"lcd ~
file scratch
endfunction
Puoi testarlo rapidamente strattonando le linee e poi :@"
. Puoi quindi provare :call Scratch()
.
Viene utilizzata una divisione in modo che il buffer corrente non venga influenzato quando si crea il buffer scratch.
(Se si preferisce omettere il split
dalla funzione, il buffer corrente sarebbe "nascosto" (non più in una finestra) quando si crea il buffer scratch. Vim si fermerà comunque e ti chiederà se si tenta di uscire con modifiche non salvate in quel buffer).
Il buffer scratch normalmente avrebbe la stessa directory di lavoro del buffer in cui ci si trova quando si chiama la funzione Scratch. Ho incluso una riga commentata per modificare la directory di lavoro del buffer scratch in home. Questo è per quelli con linee di stato divertenti che possono visualizzare il percorso della directory corrente come percorso del buffer. O solo per chi lo preferisce.
È possibile impostare il buffer di memoria virtuale come "elencato" o "non elencato" (elencato per impostazione predefinita). Se lo rendi non in :buffers
elenco non lo vedrai nel tuo elenco, ma sarà presente :buffers!
. Rimuovi il commento dalla nobuflisted
linea se preferisci che non sia presente nell'elenco. Elencato o non elencato, puoi sempre passare al tuo buffer di memoria virtuale in :b scratch
ogni caso. Rendere il buffer di memoria elencato lo rende leggermente più accessibile. Ad esempio :sball
lo includerà in una divisione.
Se si utilizza :bw
(buffer wipe) sul buffer scratch, Vim eliminerà il contenuto e rimuoverà il buffer senza preavviso. Se si utilizza :bd
(eliminazione buffer) sul buffer scratch, Vim eliminerà il contenuto senza preavviso e renderà il buffer non elencato.
È possibile creare più buffer di memoria virtuale. Vim inizia a lamentarsi ma si finisce con altri.
buftype=hide
prima di impostare il nome, non è necessario modificare la directory, poiché il nome del buffer non verrà "gestito come un nome di file". Inoltre, potrebbe essere utile menzionare 'nobuflisted'
, il che impedisce al buffer di apparire nell'output di :ls
. Ti sei in qualche modo alluso, ma non l'hai menzionato esplicitamente.
buftype=hide
è davvero una sciocchezza, e sì, stavo davvero parlando di buftype=nofile
:). Ma non riesco a riprodurre il comportamento che descrivi e credo ancora che l'affermazione Vim buffer names are always filenames
sia errata. Se rimuovo la cd
linea dalla tua funzione e la eseguo, non c'è alcun percorso nella mia statusline o nell'output di echo bufname('%')
Mi chiedo se forse questo è un problema con la tua statusline piuttosto che il nome del buffer. Qual è la tua 'statusline'
opzione impostata?
statusline
per usare qualcosa di simile expand(&buftype == 'nofile' ? '%' : '%:p:~:h')
, ma penso che ora siamo nel regno delle preferenze personali. Se decidi di continuare con la soluzione di modifica delle directory, potrebbe essere meglio utilizzare :lcd
per limitare le modifiche alla finestra in questione, ma ancora una volta dipende da te. Comunque, penso che questa sia un'ottima risposta. +1!
:h
comando ha usato per accedere a questa guida?