Buat file di bawah kursor di Vim

10

Saya punya daftar file

file1.ext
file2.ext
...

Bagaimana cara membuat file dengan nama file2.ext jika kursor saya ada di dalam file2.ext. Agak seperti gfhanya untuk membuat file baru (ini adalah situasi hipotetis, hanya berpikir mungkin bisa membantu suatu hari nanti).

Alex
sumber

Jawaban:

17

Hal pertama yang terlintas di pikiran saya adalah menggunakan touchperintah yang melintasinya nama file di bawah kursor.

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

Tetapi ada solusi Vim murni portabel lintas platform. Fungsi writefilebawaan menulis daftar ke file, baris demi baris. Secara alami, ketika daftar input kosong, itu membuat file kosong. (Lihat :help writefiledetailnya.) Kita dapat memanfaatkan efek samping ini:

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

Perhatikan bahwa ekstraksi nama file dapat disesuaikan dengan menggunakan expandpola yang berbeda (lihat :help expand()).

Omong-omong, jika seseorang ingin tidak membuat file, tetapi hanya untuk membukanya untuk diedit, seseorang dapat mendefinisikan gfpemetaan seperti:

:map <leader>gf :e <cfile><cr>

di mana :eperintah dapat diganti dengan :tabeatau perintah serupa.

Komunitas
sumber
1
+1 untuk mengajar dan <cfile>bukan<C-r><C-f>
sehe
2

Saya mengambil jawaban yang sangat baik oleh ib di atas dan memperluasnya sebagai berikut. Tujuan saya adalah menggunakan vim untuk membuat file penurunan harga baru sesuai kebutuhan untuk wiki (dalam hal ini wiki Gollum)

Saya pertama kali mencoba:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

hal di atas berfungsi seperti yang dinyatakan dalam jawaban. Namun, pada awalnya saya pikir itu tidak berfungsi karena saya tidak benar-benar melihat pembukaan file di vim. Menggunakan bit kode kedua di bawah ini akan membuka file baru - ini lebih dari apa yang saya cari. Jadi saya menggabungkannya dan mencoba:

map <leader>cf :e <cfile><cr>

tetapi itu tidak berfungsi untuk wiki karena ketika Anda mencoba membuat file baru di wiki menggunakan sintaksis seperti [[the-new-file]]sintaksis wiki tidak memungkinkan untuk ekstensi file dalam kurung. Namun, Vim perlu mengetahui ekstensi saat membuat file baru agar ini berfungsi. Dalam hal ini saya menggunakan:

    map <leader>cf :e <cfile>.md<cr>

jadi saya bisa membuat file penurunan harga baru. Ada beberapa cara untuk menyesuaikan ini lebih lanjut (misalnya dengan tidak melakukan hardcoding pada ekstensi) tetapi cara di atas berfungsi dengan baik untuk kebutuhan saya. Jika saya memerlukan ekstensi lain (misalnya untuk menyimpan file .wiki) saya mungkin hanya akan mengambil rute sederhana dan membuat peta lain seperti:

    map <leader>cwf :e <cfile>.wiki<cr>

Sebagai manfaat tambahan, Anda dapat menggunakan perintah yang sama untuk membuka file penurunan harga yang sudah ada ( gfperintah standar tidak akan berfungsi di sini karena ekstensi file tidak ada).

Bidikan Jepretan
sumber
gfberfungsi jika set suffixesadd=.wiki. Versi perbaikan dari Anda cfakan menjadi salah satu yang dihormati suffixesadd, setidaknya dalam kasus di mana itu hanya berisi satu item.
hjdivad