buat cuplikan sendiri
Saya agak baru mengenal vim. Dan saya tidak suka menginstal banyak paket.
Saya menggunakan html, javascript dan react.js, dan saya ingin membuat beberapa cara sederhana untuk mengetik dan kemudian memiliki potongan yang benar pada file tersebut.
Ini hanya akan menjadi 5 atau 6 cuplikan, dapatkah Anda membantu saya untuk mulai mempelajari seni ini?
Edit
Ada 2 ide di benak saya (secara harfiah).
- Pintasan yang merender sepotong teks (seandainya itu mungkin). Mungkin bagian teks ini disertakan dalam .vimrc atau di suatu tempat?
- Pluggings yang telah saya periksa terdiri dari mengetik sesuatu, dan mengembangkannya menggunakan salah satu tab, atau penekanan tombol tertentu.
Contoh konkretnya adalah html header, dan yang lainnya adalah komponen react, seperti ini:
class className extends React.Component{
constructor(){
super()
this.state = {}
}
render(){
return
}
}
Potongan html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content=" " />
<meta name="description" content=" " />
<title>Title Here</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
</body>
</html>
Untuk yang terakhir ini, ada emmet-vim, tapi saya lebih suka melakukannya dengan cara saya, setidaknya dalam hal cuplikan panjang.
Jawaban
TL; DR : Lihat:help abbreviations.
Contoh:
Katakanlah saya ingin membuat cuplikan untuk membuat objek JavaScript dengan cepat dalam format berikut dengan singkatan "obj" ( |mewakili posisi kursor setelah melakukan singkatan):
var foo = {|};
Saya bisa melakukan:
iabbrev obj var foo = {};<Left><Left>
Kemudian, setiap kali saya mengetik objdalam mode penyisipan diikuti dengan karakter non-kata kunci (biasanya <Space>atau <Esc>/ <c-]>), itu akan diperluas (perhatikan bahwa jika <Space>ditekan, itu akan menyisipkan spasi sebelum kursor. Metode untuk menghindari perilaku ini diuraikan di halaman bantuan untuk abbreviations)
Jika karena alasan tertentu Anda tidak ingin memperluas singkatan Anda, Anda dapat menekan <c-v>sebelum memasukkan karakter non-kata kunci.
Lihat:
:h abbreviations
:h :iabbrev
:h 'iskeyword'
Edit untuk hasil edit Anda:
Untuk salah satu contoh spesifik Anda (Komponen React), Anda dapat melakukan:
iabbrev rc class className extends React.Component{<CR>
\constructor(){<CR>
\super()<CR>
\this.state = {}<CR>
\}<CR>
\render(){<CR>
\return<CR>
\}<CR>
\}
Saya dulu \memformatnya lebih cantik, tapi saya rasa Anda bisa meletakkan semuanya dalam satu baris:
iabbrev rc class className extends React.Component{<CR>constructor(){<CR>super()<CR>this.state = {}<CR>}<CR>render(){<CR>return<CR>}<CR>}
tapi semoga berhasil bekerja dengan itu. Perlu diperhatikan adalah \mengabaikan spasi kosong sebelumnya, sehingga indentasi tidak melakukan apa pun selain membantu mengatur singkatan.
Ini akan bekerja untuk singkatan statis apa pun yang ingin Anda lakukan, termasuk contoh HTML Anda, tetapi Anda harus mencari tahu :).
Anda dapat menggunakan singkatan seperti yang biasa kami lakukan 2 dekade yang lalu, tetapi saya tidak akan merekomendasikannya untuk cuplikan multilines seperti yang Anda tunjukkan.
Tentu saja mungkin, menggunakan singkatan. Seperti yang dapat kita lakukan dengan singkatan, hampir semua yang dapat kita lakukan dengan plugin cuplikan - pada detail yang Anda inginkan untuk menggerogoti ruang ekstra yang akan Anda masukkan dengan :iabperintah default , dan sangat mungkin untuk menetralkan beberapa singkatan dari perluasan di dalamnya. komentar atau string.
Apa masalah dengan singkatan banyak baris? Mereka benar-benar tidak bisa dipertahankan. Tambahkan gerakan kursor, dan kami akan segera membutuhkan beberapa bantuan untuk mengurangi rasa sakit. Lihat misalnya singkatan sederhana yang saya miliki untuk C dan C ++ .
Inoreabbr <buffer> <silent> if <C-R>=lh#cpp#snippets#def_abbr('if ',
\ '\<c-f\>if(!cursorhere!){!mark!}!mark!')<cr>
Semua mesin tambahan ( :Inoreabbr, lh#cpp#..., !cursorhere!, !mark) adalah beberapa hal ekstra saya harus menentukan untuk mengurus makan ruang ekstra, memindahkan kursor, mendefinisikan penampung / melompat-posisi, menetralkan ekspansi dalam komentar atau string, menerapkan gaya / opsi format (spasi dan baris baru dapat disisipkan sebelum / sesudah tanda kurung ...).
Yang setara dengan mesin cuplikan bisa terlihat seperti
if(<+cond+>){<+code+>}
Berbagai mesin cuplikan menunjukkan variasi sintaks yang berbeda. Sintaks di atas berasal dari plugin yang saya pertahankan (dan itu juga dapat menerapkan format lalat). Pilih salah satu plugin di antara berbagai plugin yang ada . Ini akan jauh lebih sederhana dalam jangka panjang.
Pesan singkatan untuk hal-hal sederhana, atau karena Anda benar-benar menginginkan apa pun selain tombol spasi untuk memicu perluasan cuplikan Anda.
Jika Anda tidak ingin menggunakan alat perluasan teks, Anda dapat meletakkan setiap cuplikan dalam file vim terpisah dan cukup membaca di cuplikan (file) yang Anda perlukan :r snippet1(atau nama file apa pun yang telah Anda berikan ke cuplikan yang dimaksud). Anda harus berada dalam mode normal untuk melakukan ini.
Pastikan Vim mengetahui direktori mana yang berisi cuplikan Anda.