Apa itu jendela awal?


10

Terkadang saya melihat jendela terbuka dengan nama scratch.

Saya tahu ini semacam buffer sementara / jendela.

Bagaimana saya bisa membuat satu?

:h scratch tidak mengembalikan apa pun.

Jawaban:


11

Ini mungkin buffer awal, yang dapat dinamai. Dari bantuan:

menggaruk

Berisi teks yang bisa dibuang kapan saja. Itu disimpan ketika menutup jendela, itu harus dihapus secara eksplisit. Pengaturan:>

      :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.

Ini dapat ditemukan di :help special-buffers.


1
:hperintah mana yang digunakan untuk mengakses bantuan ini?
wizzup

2
: h buffer, lalu bacalah melalui "Jenis buffer khusus". Anda berada di jalur yang benar.
wbogacz

Saat Anda membuka file menggunakan perintah Vim, buffer dibuat secara otomatis. Misalnya, jika Anda menggunakan :editfile untuk mengedit file, buffer baru dibuat secara otomatis. Buffer kosong dapat dibuat dengan memasukkan :enewatau :newatau :vnew. Dari Vim buffer FAQ: vim.fandom.com/wiki/Vim_buffer_FAQ
NeilG

2
@wizzup :helpgrep scratchmengubahnya sebagai salah satu dari 10 (dalam instalasi saya) hasil.
Kaya

2

Saya ingat tip vim (yang telah dimigrasi ke vim.wikia) pada subjek.

Versi terbaru dari fungsi yang saya gunakan untuk membuat buffer awal juga menetapkan:

  • 'buflisted' ke false
  • 'readonly'

(Dari plugin perpustakaan VimL saya: 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

Buffer 'awal' hanyalah istilah informal untuk tempat mengetik konten sementara yang sewenang-wenang.

Mengikuti jawaban yang diterima dan pertanyaan lain, saya membuat fungsi berikut di vimrc saya.

Fungsi ini membuat buffer kosong di jendela saat ini dan menamainya 'awal'. Buffer awal tidak dilindungi jika Anda mencoba untuk berhenti. Itu akan dibuang tanpa diminta bahkan dengan perubahan yang belum disimpan jika Anda keluar dari Vim atau menghapusnya ( :bw).

Masukkan fungsi ini di vimrc Anda. Untuk membuat buffer scratch gunakan :call Scratch().

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

Anda dapat menguji ini dengan cepat dengan menarik garis lalu :@". Anda kemudian dapat mencoba :call Scratch().

Pemisahan digunakan sehingga buffer Anda saat ini tidak terpengaruh ketika Anda membuat buffer awal.

(Jika Anda lebih suka menghilangkan splitdari fungsi maka buffer Anda saat ini akan "tersembunyi" (tidak lagi di jendela) ketika Anda membuat buffer awal. Vim masih akan berhenti dan meminta Anda jika Anda mencoba untuk berhenti dengan perubahan yang belum disimpan di dalamnya. penyangga).

Buffer awal biasanya memiliki direktori kerja buffer yang sama dengan ketika Anda memanggil fungsi Scratch. Saya telah menyertakan baris komentar untuk mengubah direktori kerja buffer awal ke rumah. Ini untuk mereka yang memiliki garis status lucu yang dapat menampilkan jalur direktori saat ini sebagai jalur penyangga. Atau hanya untuk mereka yang menyukainya.

Anda dapat mengatur buffer awal untuk "terdaftar" atau "tidak terdaftar" (terdaftar secara default). Jika Anda membuatnya tidak tercantum Anda tidak akan melihatnya dalam Anda :buffersdaftar, tetapi akan berada di :buffers!. Batalkan komentar pada nobuflistedbaris jika Anda lebih suka tidak terdaftar. Tercantum atau tidak terdaftar, Anda selalu dapat mengubah buffer awal Anda :b scratch. Membuat buffer awal terdaftar membuatnya sedikit lebih mudah diakses. Misalnya :sballakan memasukkannya dalam split.

Jika Anda menggunakan :bw(buffer wipe) pada buffer awal, Vim akan menghapus konten dan menghapus buffer tanpa peringatan. Jika Anda menggunakan :bd(hapus buffer) pada buffer awal, Vim akan menjatuhkan konten tanpa peringatan dan membuat buffer tidak terdaftar.

Anda dapat membuat beberapa buffer awal. Vim mulai mengeluh tetapi Anda masih berakhir dengan yang lain.


2
Eksekusi tidak diperlukan. Fungsi Anda hanya dapat menjalankan enew dll.
D. Ben Knoble

1
Jika Anda mengatur buftype=hide sebelum mengatur nama maka mengubah direktori tidak diperlukan, karena nama buffer tidak akan "ditangani seperti nama file." Juga, mungkin layak disebutkan 'nobuflisted', yang mencegah buffer muncul di output :ls. Anda semacam menyinggungnya, tetapi tidak menyebutkannya secara eksplisit.
Kaya

Terima kasih atas komentar Anda, @ D.BenKnoble. Saya sudah membersihkan fungsi atas saran Anda.
NeilG

1
buftype=hidememang omong kosong, dan ya, saya sebenarnya berbicara tentang buftype=nofile:). Tapi saya tidak bisa mereproduksi perilaku yang Anda gambarkan, dan masih percaya pernyataan Vim buffer names are always filenamesitu salah. Jika saya menghapus cdbaris dari fungsi Anda dan kemudian menjalankannya, tidak ada jalur di statusline saya atau di output echo bufname('%')saya bertanya-tanya apakah mungkin ini adalah masalah dengan statusline Anda daripada nama buffer. Apa 'statusline'pilihan Anda diatur?
Kaya

1
Aha! Senang kita menemukannya! Jika itu saya, saya masih lebih suka untuk tidak mengubah direktori pada fungsi Scratch, jadi alih-alih saya akan berubah statuslinemenggunakan sesuatu seperti expand(&buftype == 'nofile' ? '%' : '%:p:~:h'), tapi saya pikir sekarang kita masuk ke ranah preferensi pribadi. Jika Anda memutuskan untuk tetap menggunakan solusi direktori perubahan, maka mungkin lebih baik digunakan :lcduntuk membatasi perubahan pada jendela yang dimaksud, tetapi sekali lagi itu terserah Anda. Bagaimanapun, saya pikir ini adalah jawaban yang bagus. +1!
Kaya
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.