Saya telah mendengar banyak tentang Vim , baik pro maupun kontra. Sepertinya Anda harus (sebagai pengembang) lebih cepat dengan Vim daripada dengan editor lainnya. Saya menggunakan Vim untuk melakukan beberapa hal dasar dan saya 10 kali lebih baik kurang produktif dengan Vim.
Hanya dua hal yang harus Anda perhatikan ketika Anda berbicara tentang kecepatan (Anda mungkin tidak cukup peduli tentang mereka, tetapi Anda harus) adalah:
- Menggunakan tangan kiri dan kanan sebagai alternatif adalah cara tercepat untuk menggunakan keyboard.
- Jangan pernah menyentuh mouse adalah cara kedua untuk menjadi secepat mungkin. Butuh waktu lama bagi Anda untuk menggerakkan tangan, meraih mouse, memindahkannya, dan membawanya kembali ke keyboard (dan Anda sering harus melihat keyboard untuk memastikan Anda mengembalikan tangan dengan benar ke tempat yang tepat)
Berikut adalah dua contoh yang menunjukkan mengapa saya jauh kurang produktif dengan Vim.
Salin / Potong & tempel. Saya selalu melakukannya. Dengan semua editor kontemporer Anda menekan Shift dengan tangan kiri, dan Anda menggerakkan kursor dengan tangan kanan Anda untuk memilih teks. Kemudian Ctrl+ Csalinan, Anda memindahkan kursor dan Ctrl+ Vpasta.
Dengan Vim itu mengerikan:
yy
untuk menyalin satu baris (Anda hampir tidak pernah menginginkan seluruh baris!)[number xx]yy
untuk menyalinxx
baris ke buffer. Tetapi Anda tidak pernah tahu persis apakah Anda memilih apa yang Anda inginkan. Saya sering harus melakukan[number xx]dd
kemudianu
ke undo!
Contoh lain? Cari & ganti.
- Di PSPad : Ctrl+ flalu ketikkan apa yang ingin Anda cari, lalu tekan Enter.
- Di Vim:,
/
lalu ketik apa yang ingin Anda cari, maka jika ada beberapa karakter khusus yang diletakkan\
sebelum setiap karakter khusus, lalu tekan Enter.
Dan semuanya dengan Vim seperti itu: sepertinya saya tidak tahu bagaimana menanganinya dengan benar.
NB: Saya sudah membaca lembar contekan Vim :)
Pertanyaanku adalah:
Bagaimana cara Anda menggunakan Vim yang membuat Anda lebih produktif daripada dengan editor kontemporer?
Jawaban:
Masalah Anda dengan Vim adalah Anda tidak grok vi .
Anda menyebutkan memotong dengan
yy
dan mengeluh bahwa Anda hampir tidak pernah ingin memotong garis keseluruhan. Sebenarnya programmer, mengedit kode sumber, sangat sering ingin bekerja pada seluruh baris, rentang garis dan blok kode. Namun,yy
hanya satu dari banyak cara untuk menarik teks ke dalam buffer salinan anonim (atau "daftar" seperti namanya in vi )."Zen" dari vi adalah Anda berbicara bahasa. Inisialnya
y
adalah kata kerja. Pernyataanyy
ini adalah sinonim untuky_
. Iniy
digandakan untuk membuatnya lebih mudah untuk mengetik, karena ini adalah operasi yang umum.Ini juga dapat dinyatakan sebagai
dd
P
(hapus baris saat ini dan tempel salinan kembali ke tempatnya; meninggalkan salinan dalam register anonim sebagai efek samping). They
dand
"kata kerja" mengambil gerakan apa pun sebagai "subjek" mereka. Dengan demikianyW
adalah "menarik dari sini (kursor) ke akhir kata saat ini / berikutnya (besar)" dany'a
"menarik dari sini ke baris yang mengandung tanda bernama ' a '."Jika Anda hanya memahami gerakan kursor dasar ke atas, bawah, kiri, dan kanan maka vi tidak akan lebih produktif daripada salinan "notepad" untuk Anda. (Oke, Anda masih akan memiliki penyorotan sintaks dan kemampuan untuk menangani file yang lebih besar dari piddling ~ 45KB atau lebih; tetapi bekerja dengan saya di sini).
vi memiliki 26 "tanda" dan 26 "register." Tanda ditetapkan ke lokasi kursor apa pun menggunakan
m
perintah. Setiap tanda ditandai dengan satu huruf kecil. Jadima
setel tanda ' a ' ke lokasi saat ini, danmz
setel tanda ' z '. Anda dapat pindah ke baris yang berisi tanda menggunakan perintah'
(kutipan tunggal). Dengan demikian'a
pindah ke awal baris yang berisi tanda ' a '. Anda dapat pindah ke lokasi yang tepat dari sembarang tanda menggunakan perintah`
(backquote). Dengan demikian`z
akan pindah langsung ke lokasi yang tepat dari tanda ' z '.Karena ini adalah "gerakan" mereka juga dapat digunakan sebagai subjek untuk "pernyataan" lainnya.
Jadi, salah satu cara untuk memotong teks pilihan sewenang-wenang adalah dengan menjatuhkan tanda (saya biasanya menggunakan ' a ' sebagai tanda "pertama" saya, ' z ' sebagai tanda berikutnya, ' b ' sebagai yang lain, dan ' e ' sebagai satu lagi (saya tidak ingat pernah secara interaktif menggunakan lebih dari empat tanda dalam 15 tahun penggunaan vi ; orang menciptakan konvensi sendiri tentang bagaimana tanda dan register digunakan oleh makro yang tidak mengganggu konteks interaktif seseorang). ke ujung teks yang kita inginkan; kita dapat mulai dari kedua sisi, itu tidak masalah. Kemudian kita dapat menggunakan
d`a
untuk memotong atauy`a
menyalin. Dengan demikian seluruh proses memiliki 5 penekanan tombol overhead (enam jika kita mulai di "masukkan "mode dan diperlukan untukEscmode perintah keluar). Setelah kami dipotong atau disalin kemudian paste di salinan adalah keystroke tunggal:p
.Saya mengatakan bahwa ini adalah salah satu cara untuk memotong atau menyalin teks. Namun, itu hanya satu dari banyak. Seringkali kita dapat secara lebih ringkas menggambarkan rentang teks tanpa menggerakkan kursor kita dan menjatuhkan tanda. Sebagai contoh jika saya dalam paragraf teks saya dapat menggunakan
{
dan}
memindahkan masing-masing ke awal atau akhir paragraf. Jadi, untuk memindahkan paragraf teks saya memotongnya menggunakan{
d}
(3 penekanan tombol). (Jika saya sudah berada pada baris pertama atau terakhir paragraf saya kemudian dapat menggunakand}
ataud{
masing - masing.Gagasan "paragraf" default ke sesuatu yang biasanya masuk akal secara intuitif. Jadi sering berfungsi untuk kode dan prosa.
Seringkali kita mengetahui beberapa pola (ekspresi reguler) yang menandai satu ujung atau yang lain dari teks yang kami minati. Mencari maju atau mundur adalah gerakan di vi . Dengan demikian mereka juga dapat digunakan sebagai "subjek" dalam "pernyataan" kami. Jadi saya dapat menggunakan
d/foo
untuk memotong dari baris saat ini ke baris berikutnya yang berisi string "foo" dany?bar
untuk menyalin dari baris saat ini ke baris terbaru (sebelumnya) yang berisi "bar." Jika saya tidak ingin seluruh baris saya masih bisa menggunakan gerakan pencarian (sebagai pernyataan mereka sendiri), lepaskan tanda saya dan gunakan`x
perintah seperti yang dijelaskan sebelumnya.Selain "kata kerja" dan "subjek" vi juga memiliki "objek" (dalam arti gramatikal dari istilah tersebut). Sejauh ini saya hanya menggambarkan penggunaan register anonim. Namun, saya dapat menggunakan salah satu dari 26 register "bernama" dengan mengawali referensi "objek" dengan
"
(pengubah kutipan ganda). Jadi jika saya menggunakan"add
saya memotong baris saat ini ke register ' a ' dan jika saya gunakan"by/foo
maka saya menarik salinan teks dari sini ke baris berikutnya yang berisi "foo" ke dalam register ' b '. Untuk menempel dari register, saya cukup awali paste dengan urutan pengubah yang sama:"ap
menempel salinan ' a ' register '"bP
menempelkan salinan dari ' b ' ke sebelum baris saat ini.Gagasan "awalan" ini juga menambahkan analogi dari kata sifat "kata sifat" dan "kata keterangan 'ke bahasa" manipulasi teks "kita. Sebagian besar perintah (kata kerja) dan gerakan (kata kerja atau objek, tergantung pada konteksnya) juga dapat mengambil awalan angka.
3J
berarti "bergabung dengan tiga baris berikutnya" dand5}
berarti "hapus dari baris saat ini sampai akhir paragraf kelima turun dari sini."Ini semua tingkat menengah vi . Tak satu pun dari itu adalah Vim spesifik dan ada trik jauh lebih maju di vi jika Anda siap untuk belajar mereka. Jika Anda hanya menguasai konsep-konsep perantara ini, maka Anda mungkin akan menemukan bahwa Anda jarang perlu menulis makro karena bahasa manipulasi teks cukup ringkas dan ekspresif untuk melakukan banyak hal dengan cukup mudah menggunakan bahasa "asli" editor.
Contoh trik lebih lanjut:
Ada sejumlah
:
perintah, terutama:% s/foo/bar/g
teknik substitusi global. (Itu tidak maju tetapi:
perintah lain bisa). Seluruh:
rangkaian perintah secara historis diwarisi oleh inkarnasi sebelumnya vi sebagai ed (editor baris) dan kemudian utilitas ex (editor baris diperluas). Bahkan vi dinamai demikian karena antarmuka visual untuk ex .:
perintah biasanya beroperasi di atas baris teks. ed dan ex ditulis di era ketika layar terminal tidak umum dan banyak terminal adalah perangkat "teletype" (TTY). Jadi itu biasa untuk bekerja dari salinan teks yang dicetak, menggunakan perintah melalui antarmuka yang sangat singkat (kecepatan koneksi umum adalah 110 baud, atau, kira-kira, 11 karakter per detik - yang lebih lambat daripada pengetik cepat; kelambatan umum terjadi pada sesi interaktif multi-pengguna; juga sering ada motivasi untuk menghemat kertas).Jadi sintaksis sebagian besar
:
perintah termasuk alamat atau rentang alamat (nomor baris) diikuti oleh perintah. Secara alami seseorang dapat menggunakan nomor baris literal::127,215 s/foo/bar
untuk mengubah kemunculan pertama "foo" menjadi "bar" pada setiap baris antara 127 dan 215. Seseorang juga dapat menggunakan beberapa singkatan seperti.
atau$
untuk baris saat ini dan terakhir masing-masing. Kita juga bisa menggunakan awalan relatif+
dan-
merujuk ke offset setelah atau sebelum garis curent, masing-masing. Jadi::.,$j
artinya "dari baris saat ini ke baris terakhir, gabungkan semuanya menjadi satu baris".:%
identik dengan:1,$
(semua baris).The
:... g
dan:... v
perintah menanggung sebagian penjelasan mereka sangat kuat.:... g
adalah awalan untuk "secara global" menerapkan perintah berikutnya untuk semua baris yang cocok dengan pola (ekspresi reguler) sambil:... v
menerapkan perintah tersebut untuk semua baris yang TIDAK cocok dengan pola yang diberikan ("v" dari "conVerse"). Seperti halnya perintah ex lainnya, ini dapat diawali dengan mengatasi / mencari referensi. Dengan demikian:.,+21g/foo/d
berarti "hapus semua baris yang berisi string" foo "dari yang sekarang hingga 21 baris berikutnya" sementara itu:.,$v/bar/d
berarti "dari sini ke akhir file, hapus semua baris yang TIDAK mengandung string" bar. "Sungguh menarik bahwa umum perintah Unix grep sebenarnya terinspirasi oleh ini mantan perintah (dan dinamai cara di mana itu didokumentasikan). The ex perintah
:g/re/p
(grep) adalah cara mereka didokumentasikan bagaimana "global" "mencetak" garis yang berisi "ekspresi reguler" (re). Ketika ed dan ex digunakan,:p
perintah adalah salah satu yang pertama yang dipelajari dan sering kali yang pertama digunakan saat mengedit file apa pun. Begitulah cara Anda mencetak konten saat ini (biasanya hanya satu halaman penuh pada saat menggunakan:.,+25p
atau semacamnya).Perhatikan bahwa
:% g/.../d
atau (pembalikan / pembalikan::% v/.../d
adalah pola penggunaan yang paling umum. Namun ada beberapaex
perintah lain yang perlu diingat:Kita dapat menggunakan
m
untuk memindahkan garis, danj
untuk bergabung dengan garis. Misalnya jika Anda memiliki daftar dan ingin memisahkan semua barang yang cocok (atau sebaliknya TIDAK cocok dengan beberapa pola) tanpa menghapusnya, maka Anda dapat menggunakan sesuatu seperti::% g/foo/m$
... dan semua "foo" baris akan dipindahkan ke akhir file. (Perhatikan tip lain tentang menggunakan ujung file Anda sebagai ruang awal). Ini akan mempertahankan urutan relatif semua baris "foo" sambil mengekstraknya dari daftar lainnya. (Ini setara dengan melakukan sesuatu seperti:1G!GGmap!Ggrep foo<ENTER>1G:1,'a g/foo'/d
(salin file ke ekornya sendiri, filter ekor melaluigrep
, dan hapus semua hal dari kepala).Untuk bergabung dengan garis biasanya saya dapat menemukan pola untuk semua garis yang perlu digabungkan dengan pendahulunya (semua garis yang dimulai dengan "^" daripada "^ *" dalam beberapa daftar peluru, misalnya). Untuk itu saya akan menggunakan:
:% g/^ /-1j
(untuk setiap baris yang cocok, naik satu baris dan bergabung dengan mereka). (BTW: untuk daftar peluru mencoba untuk mencari jalur peluru dan bergabung ke depan tidak bekerja untuk beberapa alasan ... itu dapat bergabung dengan salah satu baris peluru ke yang lain, dan itu tidak akan bergabung dengan garis peluru untuk semua dari kelanjutannya; itu hanya akan bekerja berpasangan pada pertandingan).Hampir tidak perlu disebutkan, Anda dapat menggunakan teman lama kami
s
(pengganti) dengan perintahg
danv
(global / converse-global). Biasanya Anda tidak perlu melakukannya. Namun, pertimbangkan beberapa kasus di mana Anda ingin melakukan penggantian hanya pada garis yang cocok dengan beberapa pola lainnya. Seringkali Anda dapat menggunakan pola yang rumit dengan menangkap dan menggunakan kembali referensi untuk mempertahankan bagian dari garis yang Anda TIDAK ingin ubah. Namun, seringkali akan lebih mudah untuk memisahkan kecocokan dari substitusi::% g/foo/s/bar/zzz/g
- untuk setiap baris yang berisi "foo" gantikan semua "bar" dengan "zzz." (Sesuatu seperti:% s/\(.*foo.*\)bar\(.*\)/\1zzz\2/g
hanya akan bekerja untuk kasus-kasus contoh "bar" yang DIHARAPKAN oleh "foo" pada baris yang sama; itu sudah cukup canggung, dan harus dihancurkan lebih lanjut untuk menangkap semua kasus di mana "bar" didahului "foo")Intinya adalah bahwa ada lebih dari sekedar
p
,s
dand
garis-garis diex
set perintah.:
Alamat - alamat itu juga bisa merujuk pada tanda. Dengan demikian Anda dapat menggunakan::'a,'bg/foo/j
untuk bergabung dengan baris apa pun yang berisi string foo ke baris berikutnya, jika berada di antara garis antara tanda ' a ' dan ' b '. (Ya, semuaex
contoh perintah sebelumnya dapat dibatasi untuk himpunan bagian dari baris file dengan awalan dengan jenis ekspresi pengalamatan ini).Itu sangat tidak jelas (Saya hanya menggunakan sesuatu seperti itu beberapa kali dalam 15 tahun terakhir). Namun, saya akan dengan bebas mengakui bahwa saya sering melakukan hal-hal secara iteratif dan interaktif yang mungkin bisa dilakukan lebih efisien jika saya meluangkan waktu untuk memikirkan mantra yang benar.
Lain sangat berguna vi atauPerintah ex adalah
:r
membaca isi dari file lain. Dengan demikian::r foo
menyisipkan konten file bernama "foo" di baris saat ini.Lebih kuat adalah
:r!
perintahnya. Ini membaca hasil dari suatu perintah. Ini sama dengan menangguhkan sesi vi , menjalankan perintah, mengarahkan outputnya ke file sementara, melanjutkan kembali sesi vi Anda , dan membaca konten dari temp. mengajukan.Yang lebih kuat lagi adalah perintah
!
(bang) dan:... !
( ex bang). Ini juga menjalankan perintah eksternal dan membaca hasilnya ke dalam teks saat ini. Namun, mereka juga memfilter pilihan teks kita melalui perintah! Ini kita bisa mengurutkan semua baris dalam file kita menggunakan1G!Gsort
(G
adalah perintah vi "goto"; ini default untuk pergi ke baris terakhir file, tetapi dapat diawali dengan nomor baris, seperti 1, baris pertama). Ini setara dengan varian ex:1,$!sort
. Penulis sering menggunakan!
dengan Unix fmt atau utilitas lipat untuk mereformasi atau "pembungkus kata" pilihan teks. Makro yang sangat umum adalah{!}fmt
(memformat ulang paragraf saat ini). Pemrogram terkadang menggunakannya untuk menjalankan kode mereka, atau hanya sebagian, melalui indent atau alat pemformatan ulang kode lainnya.Menggunakan
:r!
dan!
perintah berarti utilitas atau filter eksternal apa pun dapat diperlakukan sebagai ekstensi editor kami. Saya kadang-kadang menggunakan ini dengan skrip yang menarik data dari database, atau dengan perintah wget atau lynx yang menarik data dari situs web, atau ssh perintah yang menarik data dari sistem jarak jauh.Perintah ex berguna lainnya adalah
:so
(kependekan dari:source
). Ini membaca isi file sebagai serangkaian perintah. Ketika Anda mulai vi secara normal, secara implisit, melakukan file:source
pada~/.exinitrc
(dan Vim biasanya melakukan ini~/.vimrc
, cukup alami). Kegunaannya adalah Anda dapat mengubah profil editor dengan cepat hanya dengan mencari di set makro, singkatan, dan pengaturan editor yang baru. Jika Anda licik, Anda bahkan dapat menggunakan ini sebagai trik untuk menyimpan urutan perintah pengeditan ex untuk diterapkan ke file sesuai permintaan.Misalnya saya punya file tujuh baris (36 karakter) yang menjalankan file wc , dan menyisipkan komentar gaya-C di bagian atas file yang berisi data jumlah kata itu. Saya bisa menerapkan "makro" itu ke file dengan menggunakan perintah seperti:
vim +'so mymacro.ex' ./mytarget
(
+
Opsi baris perintah ke vi dan Vim biasanya digunakan untuk memulai sesi pengeditan pada nomor baris yang diberikan. Namun, sedikit fakta yang diketahui bahwa seseorang dapat mengikuti+
dengan perintah / ekspresi ex yang valid , seperti perintah "sumber" seperti Saya sudah selesai di sini, sebagai contoh sederhana saya memiliki skrip yang memanggil:vi +'/foo/d|wq!' ~/.ssh/known_hosts
untuk menghapus entri dari file host SSH saya yang dikenal non-interaktif saat saya kembali menggambar satu set server)Biasanya jauh lebih mudah untuk menulis "macro" seperti itu menggunakan Perl, AWK, sed (yang, pada kenyataannya, seperti grep utilitas yang terinspirasi oleh perintah ed ).
The
@
perintah mungkin yang paling jelas vi perintah. Dalam sesekali mengajar kursus administrasi sistem canggih selama hampir satu dekade, saya bertemu sangat sedikit orang yang pernah menggunakannya.@
mengeksekusi isi register seolah-olah itu adalah perintah vi atau ex .Contoh: Saya sering menggunakan:
:r!locate ...
untuk menemukan beberapa file di sistem saya dan membaca namanya ke dalam dokumen saya. Dari sana saya menghapus setiap klik yang tidak diinginkan, hanya menyisakan path lengkap ke file yang saya minati. Daripada dengan susah payah Tabmenelusuri setiap komponen path (atau lebih buruk lagi, jika saya terjebak pada mesin tanpa dukungan penyelesaian Tab) dalam salinan vi ) Saya hanya menggunakan:0i:r
(untuk mengubah baris saat ini menjadi perintah yang valid : r ),"cdd
(untuk menghapus baris ke dalam register "c") dan@c
jalankan perintah itu.Itu hanya 10 penekanan tombol (dan ungkapan
"cdd
@c
itu secara efektif adalah makro jari untuk saya, jadi saya bisa mengetiknya hampir secepat kata enam huruf biasa).Pikiran yang serius
Saya hanya mencakar ke permukaan kekuatan vi dan tidak satupun dari apa yang saya jelaskan di sini bahkan merupakan bagian dari "perbaikan" yang namanya vim ! Semua yang saya jelaskan di sini harus bekerja pada salinan lama vi dari 20 atau 30 tahun yang lalu.
Ada orang yang menggunakan kekuatan vi jauh lebih besar daripada yang pernah saya lakukan.
sumber
@
perintah (dalam kombinasi denganq
: record macro)Anda berbicara tentang memilih dan menyalin teks, saya pikir Anda harus melihat ke Vim Visual Mode .
Dalam mode visual, Anda dapat memilih teks menggunakan perintah Vim, kemudian Anda dapat melakukan apa pun yang Anda inginkan dengan seleksi.
Pertimbangkan skenario umum berikut:
Anda harus memilih kurung yang cocok berikutnya.
Anda bisa melakukannya:
v%
jika kursor berada di tanda kurung mulai / berakhirvib
jika kursor ada di dalam blok kurungAnda ingin memilih teks di antara kutipan:
Anda ingin memilih blok penjepit keriting (sangat umum pada bahasa gaya-C):
viB
vi{
Anda ingin memilih seluruh file:
ggVG
Pemilihan blok visual adalah fitur lain yang sangat berguna, memungkinkan Anda untuk memilih area teks persegi panjang, Anda hanya perlu menekan Ctrl- Vuntuk memulainya, dan kemudian pilih blok teks yang Anda inginkan dan melakukan semua jenis operasi seperti mencabut, menghapus, rekatkan, edit, dll. Sangat menyenangkan untuk mengedit teks yang berorientasi kolom .
sumber
o
akan melompat ke ujung lainnya. Jadi, Anda dapat memindahkan awal dan akhir seleksi sebanyak yang Anda suka.Beberapa kiat produktivitas:
Gerakan cerdas
*
dan#
cari kata di bawah kursor maju / mundur.w
ke kata selanjutnyaW
ke kata yang dipisahkan spasi berikutnyab
/e
ke awal / akhir dari kata saat ini. (B
/ hanyaE
untuk ruang terpisah)gg
/G
lompat ke awal / akhir file.%
lompat ke yang cocok {..} atau (..), dll.{
/}
lompat ke paragraf berikutnya.'.
melompat kembali ke baris yang terakhir diedit.g;
melompat kembali ke posisi terakhir yang diedit.Perintah pengeditan cepat
I
masukkan di awal.A
tambahkan untuk mengakhiri.o
/O
buka baris baru setelah / sebelum saat ini.v
/V
/Ctrl+V
mode visual (untuk memilih teks!)Shift+R
ganti teksC
ubah bagian garis yang tersisa.Menggabungkan perintah
Sebagian besar perintah menerima jumlah dan arah, misalnya:
cW
= ubah sampai akhir kata3cW
= ubah 3 kataBcW
= untuk memulai kata penuh, ubah kata penuhciW
= ubah kata hati.ci"
= ubah inner antara ".."ci(
= ubah teks antara (..)ci<
= ubah teks antara <..> (kebutuhanset matchpairs+=<:>
di vimrc)4dd
= hapus 4 baris3x
= hapus 3 karakter.3s
= gantikan 3 karakter.Perintah programmer yang berguna
r
ganti satu karakter (mis. ganti karakterrd
saat ini dengand
).~
mengubah huruf.J
bergabung dengan dua baris.
ulangi perintah terakhir (makro sederhana)==
perbaiki indentasi saluran>
blok indent (dalam mode visual)<
blok tidak inden (dalam mode visual)Rekaman makro
q[ key ]
untuk mulai merekam.q
untuk berhenti merekam.@[ key ]
.Dengan menggunakan perintah dan gerakan yang sangat spesifik, VIM dapat memutar ulang tindakan yang tepat untuk baris berikutnya. (misalnya A untuk append-to-end,
b
/e
untuk memindahkan kursor ke awal atau akhir kata masing-masing)Contoh pengaturan yang dibangun dengan baik
Pengaturan dapat disimpan di
~/.vimrc
, atau di seluruh sistem/etc/vimrc.local
dan kemudian dengan membaca dari/etc/vimrc
file menggunakan:(Anda harus mengganti
#
karakter komentar dengan"
agar berfungsi di VIM, saya ingin memberikan highlight sintaks yang tepat di sini).Perintah yang saya daftarkan di sini cukup mendasar, dan yang utama saya gunakan sejauh ini. Mereka sudah membuat saya lebih produktif, tanpa harus tahu semua hal mewah.
sumber
'.
inig;
, yang melompat kembali melalui Internetchangelist
. Pergi ke posisi yang diedit terakhir, alih-alih baris yang diedit terakhirThe Control+ RMekanisme ini sangat berguna :-) Dalam kedua modus insert atau modus perintah (yaitu pada
:
baris ketika perintah mengetik), lanjutkan dengan register nomor atau nama:Lihat
:help i_CTRL-R
dan:help c_CTRL-R
untuk lebih jelasnya, dan snoop di sekitarnya untuk kebaikan CTRL-R lainnya.sumber
Control-A
juga berfungsi dalam mode penyisipan untuk teks yang disisipkan terakhir, danControl-@
untuk menyisipkan teks yang disisipkan terakhir dan segera beralih ke mode normal.Plugin Vim
Ada banyak jawaban bagus di sini, dan satu yang menakjubkan tentang zen of vi. Satu hal yang saya tidak lihat disebutkan adalah bahwa vim sangat dapat dikembangkan melalui plugin. Ada skrip dan plugin untuk membuatnya melakukan segala macam hal gila yang penulis asli tidak pernah pertimbangkan. Berikut adalah beberapa contoh plugin vim yang sangat berguna:
rails.vim
Rails.vim adalah plugin yang ditulis oleh tpope. Ini alat yang luar biasa bagi orang yang melakukan pengembangan rel. Itu melakukan hal-hal sensitif konteks ajaib yang memungkinkan Anda untuk dengan mudah beralih dari metode di controller ke tampilan terkait, ke model, dan ke unit test untuk model itu. Ini telah menyelamatkan puluhan jika tidak ratusan jam sebagai pengembang rel.
gist.vim
Plugin ini memungkinkan Anda untuk memilih wilayah teks dalam mode visual dan mengetik perintah cepat untuk mengirimnya gist.github.com . Ini memungkinkan akses pastebin yang mudah, yang sangat berguna jika Anda berkolaborasi dengan seseorang melalui IRC atau IM.
space.vim
Plugin ini menyediakan fungsionalitas khusus untuk bilah spasi. Itu mengubah bilah spasi menjadi sesuatu yang analog dengan periode, tetapi alih-alih mengulangi tindakan itu mengulangi gerakan. Ini bisa sangat berguna untuk bergerak cepat melalui file dengan cara yang Anda tetapkan saat itu juga.
surround.vim
Plugin ini memberi Anda kemampuan untuk bekerja dengan teks yang dibatasi dalam beberapa cara. Ini memberi Anda objek yang menunjukkan hal-hal di dalam parens, hal-hal di dalam tanda kutip, dll. Ini bisa berguna untuk memanipulasi teks yang dibatasi.
supertab.vim
Script ini membawa fungsionalitas penyelesaian tab mewah ke vim. Hal-hal pelengkapan otomatis sudah ada di inti vim, tetapi ini membawanya ke tab cepat daripada beberapa pintasan multikey yang berbeda. Sangat berguna, dan sangat menyenangkan untuk digunakan. Meskipun ini bukan intellisense VS, ini adalah langkah yang bagus dan membawa banyak fungsi yang ingin Anda harapkan dari alat penyelesaian tab.
syntastic.vim
Alat ini membawa perintah pemeriksaan sintaksis eksternal ke vim. Saya belum menggunakannya secara pribadi, tetapi saya sudah mendengar banyak hal hebat tentangnya dan konsepnya sulit dikalahkan. Memeriksa sintaksis tanpa harus melakukannya secara manual adalah penghemat waktu yang hebat dan dapat membantu Anda menangkap bug sintaksis saat Anda memperkenalkannya daripada ketika Anda akhirnya berhenti untuk menguji.
buron.vim
Akses langsung ke git dari dalam vim. Sekali lagi, saya belum pernah menggunakan plugin ini, tetapi saya dapat melihat utilitasnya. Sayangnya saya berada dalam budaya di mana svn dianggap "baru", jadi saya mungkin tidak akan melihat git di tempat kerja selama beberapa waktu.
nerdtree.vim
Peramban pohon untuk vim. Saya mulai menggunakan ini baru-baru ini, dan itu sangat berguna. Ini memungkinkan Anda meletakkan treeview dalam pemisahan vertikal dan membuka file dengan mudah. Ini bagus untuk proyek dengan banyak file sumber yang sering Anda lompati.
FuzzyFinderTextmate.vim
Ini adalah plugin yang tidak dirawat, tetapi masih sangat berguna. Ini memberikan kemampuan untuk membuka file menggunakan sintaks deskriptif "fuzzy". Ini berarti bahwa dalam pohon file yang jarang, Anda hanya perlu mengetikkan karakter yang cukup untuk memisahkan file yang Anda minati dari sisa cruft.
Kesimpulan
Ada banyak alat luar biasa yang tersedia untuk vim. Saya yakin saya hanya menggores permukaan di sini, dan ada baiknya mencari alat yang berlaku untuk domain Anda. Kombinasi toolset vi kuat tradisional, peningkatan vim di atasnya, dan plugin yang memperpanjang vim lebih jauh, itu salah satu cara paling ampuh untuk mengedit teks yang pernah dikandung. Vim dengan mudah sekuat emacs, eclipse, visual studio, dan textmate.
Terima kasih
Terima kasih kepada duwanis untuk konfigurasi vim- nya dari mana saya telah belajar banyak dan meminjam sebagian besar plugin yang tercantum di sini.
sumber
.
Ulangi perintah pengubahan teks terakhirSaya menghemat banyak waktu dengan yang satu ini.
Mode visual telah disebutkan sebelumnya, tetapi blok mode visual telah menghemat banyak waktu saya ketika mengedit kolom ukuran tetap dalam file teks. (diakses dengan Ctrl-V).
sumber
.
tombol di.gi
Pergi ke lokasi yang terakhir diedit (sangat berguna jika Anda melakukan pencarian dan daripada ingin kembali mengedit)
^ P dan ^ N
Isi teks sebelumnya (^ P) atau berikutnya (^ N).
^ O dan ^ I
Pergi ke lokasi sebelumnya (
^O
-"O"
untuk yang lama) atau ke yang berikutnya (^I
-"I"
hanya dekat dengan"O"
). Saat Anda melakukan pencarian, mengedit file, dll., Anda dapat menavigasi melalui "lompatan" ini maju dan mundur.sumber
Baru-baru ini saya menemukan situs ini: http://vimcasts.org/
Ini cukup baru dan sangat bagus. Orang yang menjalankan situs beralih dari textmate ke vim dan host gips yang sangat bagus dan ringkas tentang topik vim tertentu. Coba lihat!
sumber
CTRL+A menambah nomor yang Anda pegang.
sumber
Semua dalam mode Normal:
f <char> untuk pindah ke instance berikutnya dari karakter tertentu pada baris saat ini, dan ; mengulang.
F <char> untuk pindah ke instance sebelumnya dari karakter tertentu pada baris saat ini dan ; mengulang.
Jika digunakan dengan cerdas, dua di atas dapat membuat Anda cepat-pembunuh bergerak dalam satu garis.
* pada kata untuk mencari contoh berikutnya.
# pada kata untuk mencari contoh sebelumnya.
sumber
ct(
akan menghapus kata dan menempatkan Anda dalam mode penyisipan, tetapi simpan paranthes!Sidang
Sebuah. simpan sesi
b. paksa sesi save
c. sesi pemuatan
Menambah dan Mengurangkan
Sebuah. Menambah dan Mengurangkan
b. Kunci jendela tidak dipetakan
c. Dengan Makro
sumber
Minggu lalu di tempat kerja proyek kami mewarisi banyak kode Python dari proyek lain. Sayangnya kode tersebut tidak cocok dengan arsitektur kami yang ada - semuanya dilakukan dengan variabel dan fungsi global, yang tidak akan berfungsi di lingkungan multi-utas.
Kami memiliki ~ 80 file yang perlu dikerjakan ulang agar berorientasi objek - semua fungsi dipindahkan ke kelas, parameter diubah, pernyataan impor ditambahkan, dll. Kami memiliki daftar sekitar 20 jenis perbaikan yang perlu dilakukan untuk setiap file. Saya memperkirakan bahwa melakukannya dengan tangan yang bisa dilakukan oleh satu orang mungkin 2-4 per hari.
Jadi saya melakukan yang pertama dengan tangan dan kemudian menulis skrip vim untuk mengotomatiskan perubahan. Sebagian besar adalah daftar perintah vim misalnya
Yang terakhir layak mendapat sedikit penjelasan:
Untuk beberapa transformasi yang lebih kompleks seperti menghasilkan semua pernyataan impor, saya menyertakan beberapa python ke skrip vim.
Setelah beberapa jam mengerjakannya, saya memiliki skrip yang akan melakukan setidaknya 95% dari konversi. Saya baru saja membuka file di vim kemudian jalankan
:source fixit.vim
dan file ditransformasikan dalam sekejap mata.Kami masih memiliki pekerjaan untuk mengubah 5% sisanya yang tidak layak untuk diotomatisasi dan untuk menguji hasilnya, tetapi dengan menghabiskan satu hari menulis skrip ini, saya memperkirakan kami telah menghemat minggu kerja.
Tentu saja akan mungkin untuk mengotomatisasi ini dengan bahasa scripting seperti Python atau Ruby, tetapi itu akan memakan waktu lebih lama untuk menulis dan akan kurang fleksibel - contoh terakhir akan sulit karena regex saja tidak akan mampu menangani kurung bersarang, misalnya untuk dikonversi
bar(foo(xxx))
kefoo(xxx).bar()
. Vim sempurna untuk tugas itu.sumber
%s/\(bar\)(\(.\+\))/\2.\1()/
akan melakukannya juga. (Escapes kompatibel dengan:set magic
.) Hanya sebagai catatan. :)%s/\v(bar)\((.+)\)/\2.\1()/
if bar(foo(xxx)) or wibble(xxx):
menjadiif foo(xxx)) or wibble(xxx.bar():
yang sepenuhnya salah.Gunakan penjelajah file bawaan! Perintahnya adalah
:Explore
dan memungkinkan Anda untuk menavigasi kode sumber Anda dengan sangat cepat. Saya memiliki pemetaan ini di.vimrc
:Penjelajah memungkinkan Anda untuk membuat modifikasi file juga. Saya akan memposting beberapa kunci favorit saya, menekan
<F1>
akan memberi Anda daftar lengkap:cd ..
)sumber
:find
,:tag
dan berbagai penekanan tombol terkait untuk melompat-lompat. (Mungkin ini karena pohon sumber tempat saya bekerja besar dan terorganisir berbeda dari yang seharusnya saya lakukan? :))Saya adalah anggota dari American Cryptogram Association. Majalah dua bulanan mencakup lebih dari 100 jenis cryptogram. Kira-kira 15 di antaranya adalah "cryptarithms" - berbagai jenis masalah aritmatika dengan huruf-huruf yang diganti untuk digit. Dua atau tiga di antaranya adalah sudokus, kecuali dengan huruf, bukan angka. Ketika kisi-kisi selesai, sembilan huruf yang berbeda akan mengeja kata atau kata-kata, pada beberapa baris, diagonal, spiral, dll., Di suatu tempat di grid.
Daripada bekerja dengan pensil, atau mengetik masalah dengan tangan, saya mengunduh masalah dari area anggota situs web mereka.
Ketika bekerja dengan sudokus ini, saya menggunakan vi, hanya karena saya menggunakan fasilitas yang vi miliki oleh beberapa editor lain. Sebagian besar dalam mengubah kisi berhuruf menjadi kisi bernomor, karena saya merasa lebih mudah untuk menyelesaikan, dan kemudian kisi bernomor selesai kembali ke kisi berhuruf untuk menemukan kata solusi atau kata-kata.
Masalahnya diformat sebagai sembilan kelompok yang terdiri dari sembilan huruf, dengan huruf
-
s mewakili bagian yang kosong, ditulis dalam dua baris. Langkah pertama adalah memformat ini menjadi sembilan baris sembilan karakter masing-masing. Tidak ada yang istimewa tentang ini, hanya memasukkan delapan linebreak di tempat yang tepat.Hasilnya akan terlihat seperti ini:
Jadi, langkah pertama dalam mengubah ini menjadi angka adalah membuat daftar huruf-huruf yang berbeda. Pertama, saya membuat salinan blok. Saya memposisikan kursor di bagian atas blok, lalu ketik
:y}}p
.:
menempatkan saya dalam mode perintah,y
menarik perintah gerakan berikutnya. Karena}
pindah ke akhir paragraf berikutnya,y}
menarik paragraf.}
lalu gerakkan kursor ke akhir paragraf, danp
tempelkan apa yang telah kita tarik tepat setelah kursor. Jadiy}}p
buat salinan paragraf berikutnya, dan berakhir dengan kursor di antara dua salinan.Selanjutnya, saya mengubah salah satu salinan itu menjadi daftar surat yang berbeda. Perintah itu sedikit lebih rumit:
:
lagi menempatkan saya dalam mode perintah.!
menunjukkan bahwa konten yank berikutnya harus disalurkan melalui baris perintah.}
menyentak ayat berikutnya, dan baris perintah kemudian menggunakantr
perintah untuk menghapus segala sesuatu kecuali untuk huruf-huruf, yangsed
perintah untuk mencetak setiap huruf pada satu baris, dansort
perintah untuk mengurutkan garis, menghapus duplikat, dan kemudiantr
strip keluar baris baru, meninggalkan sembilan huruf berbeda dalam satu baris, menggantikan sembilan baris yang telah membentuk paragraf pada awalnya. Dalam hal ini, surat-suratnya adalah:ACELNOPST
.Langkah selanjutnya adalah membuat salinan grid yang lain. Dan kemudian menggunakan huruf Saya baru saja diidentifikasi untuk menggantikan masing-masing huruf dengan angka dari 1 sampai 9. Itu sederhana:
:!}tr ACELNOPST 0-9
. Hasilnya adalah:Ini kemudian dapat dipecahkan dengan cara biasa, atau dimasukkan ke pemecah sudoku apa pun yang Anda inginkan. Solusi yang lengkap kemudian dapat dikonversi kembali menjadi huruf dengan
:!}tr 1-9 ACELNOPST
.Ada kekuatan di vi yang cocok dengan sangat sedikit orang lain. Masalah terbesar adalah bahwa hanya sedikit dari buku tutorial vi, situs web, file bantuan, dll, melakukan lebih dari menyentuh permukaan apa yang mungkin.
sumber
:
masuk ke mode perintah, tetapi kemudian Anda selalu menentukan perintah mode normal (sepertiy}}p
) yang tidak mungkin bekerja dari mode perintah ?!:se tw=1 fo=
(persiapan)VG:s/./& /g
(menyisipkan spasi),gvgq
(terbagi menjadi beberapa baris terpisah),V{:sort u
(mengurutkan dan menghapus duplikat)Manipulasi teks massal!
Baik melalui makro:
qq
q
@q
(pertama kali),@@
setelah itu.20@@
Atau melalui ekspresi reguler:
:%s/[fo]+/bar/g
(Tetapi berhati-hatilah: jika Anda melakukan yang terakhir, Anda akan memiliki 2 masalah :).)
sumber
:% g/foo/-1j
atau:'a,'z v/bar/-1j
misalnya (di mana yang pertama adalah "semua garis dan cocok dengan pola" sedangkan yang terakhir adalah "garis antara tanda a dan tanda z yang gagal cocok dengan pola"). Bagian setelah derai dalam perintah ag
atauv
ex dapat berupa perintah ex lainnya, -1j hanyalah gerakan garis relatif dan bergabung dengan perintah.Saya baru-baru ini menemukan
q:
. Ini membuka "jendela perintah" dan menunjukkan perintah ex-mode (mode-perintah) terbaru Anda. Anda dapat bergerak seperti biasa di dalam jendela, dan menekan<CR>
menjalankan perintah. Anda dapat mengedit, dll. Juga. Tak ternilai saat Anda bermain-main dengan beberapa perintah kompleks atau regex dan Anda tidak ingin mengetik ulang semuanya, atau jika hal kompleks yang ingin Anda lakukan adalah 3 perintah kembali. Ini hampir seperti bashset -o vi
, tetapi untuk vim itu sendiri (heh!).Lihat
:help q:
bit yang lebih menarik untuk bolak-balik.sumber
Saya baru saja menemukan penyelesaian omnic Vim tempo hari, dan walaupun saya akui saya agak kabur tentang apa yang dilakukan, saya mendapatkan hasil yang sangat bagus hanya menumbuk Ctrl+ x Ctrl+ uatau Ctrl+ n/ Ctrl+ pdalam mode insert. Ini bukan IntelliSense , tapi saya masih mempelajarinya.
Cobalah!
:help ins-completion
sumber
Ini bukan jalan pintas, tetapi terkait:
Mereka meningkatkan produktivitas saya.
sumber
Capslock::Escape
"Pintasan" vi lain yang bermanfaat yang sering saya gunakan adalah 'xp'. Ini akan menukar karakter di bawah kursor dengan karakter berikutnya.
sumber
Xp
untuk pergi ke arah lain<Ctrl> + W, V untuk membagi layar secara vertikal
<Ctrl> + W, W untuk berpindah antar jendela
! python% [args] untuk menjalankan skrip yang saya edit di jendela ini
ZF dalam mode visual untuk melipat garis sewenang-wenang
sumber
<C-w>n
atau<C-w>s
merupakan jendela horisontal baru,<C-w>b
adalah jendela kanan bawah,<C-w>c
atau<C-w>q
yang jendela dekat,<C-w>x
adalah peningkatan dan kemudian menurun lebar jendela (??),<C-w>p
adalah jendela terakhir,<C-w>backspace
yang bergerak ke kiri window (ish):help ctrl-w
FTW ... bantulah dirimu sendiri, dan paksakan dirimu untuk mencoba hal-hal ini setidaknya selama 15 menit!Mode Visual
Seperti beberapa orang lain katakan, mode visual adalah jawaban untuk masalah salin / potong & tempel Anda. Vim memberi Anda 'v', 'V', dan Cv. Huruf kecil 'v' dalam vim pada dasarnya sama dengan tombol shift di notepad. Yang menyenangkan adalah Anda tidak harus menahannya. Anda dapat menggunakan teknik gerakan apa pun untuk menavigasi secara efisien ke titik awal (atau akhir) pilihan Anda. Lalu tekan 'v', dan gunakan teknik gerakan efisien lagi untuk menavigasi ke ujung pilihan Anda. Kemudian 'd' atau 'y' memungkinkan Anda untuk memotong atau menyalin pilihan itu.
Mode visual kelebihan vim memiliki lebih dari deskripsi Jim Dennis tentang cut / copy / paste in vi adalah Anda tidak harus mendapatkan lokasi yang tepat. Terkadang lebih efisien untuk menggunakan gerakan cepat untuk mencapai area umum di mana Anda ingin pergi dan kemudian memperbaikinya dengan gerakan lain daripada memikirkan perintah gerakan tunggal yang lebih kompleks yang membuat Anda tepat di tempat yang ingin Anda tuju.
Kelemahan dari menggunakan mode visual secara luas dengan cara ini adalah bahwa hal itu dapat menjadi penopang yang Anda gunakan sepanjang waktu yang mencegah Anda dari mempelajari perintah vi (m) baru yang memungkinkan Anda melakukan sesuatu dengan lebih efisien. Namun, jika Anda sangat proaktif dalam mempelajari aspek baru vi (m), maka ini mungkin tidak akan banyak mempengaruhi Anda.
Saya juga akan menekankan kembali bahwa garis visual dan mode blok visual memberi Anda variasi pada tema yang sama yang bisa sangat kuat ... terutama mode blok visual.
Penggunaan Keyboard yang Efisien
Saya juga tidak setuju dengan pernyataan Anda bahwa bergantian tangan adalah cara tercepat untuk menggunakan keyboard. Ia memiliki unsur kebenaran di dalamnya. Secara umum, penggunaan berulang dari hal yang sama lambat. Contoh paling penting dari prinsip ini adalah bahwa penekanan tombol berurutan yang diketik dengan jari yang sama sangat lambat. Penegasan Anda mungkin berasal dari kecenderungan alami untuk menggunakan s / jari / tangan / transformasi pada pola ini. Sampai batas tertentu itu benar, tetapi pada ujung yang sangat tinggi dari spektrum efisiensi itu tidak benar.
Tanyakan pianis mana saja. Tanyakan kepada mereka apakah lebih cepat memainkan serangkaian not secara bergantian atau menggunakan jari berturut-turut dari satu tangan secara berurutan. Cara tercepat untuk mengetik 4 kali penekanan tombol bukan dengan mengganti tangan, tetapi mengetiknya dengan 4 jari tangan yang sama dalam urutan naik atau turun (sebut ini "lari"). Ini harus jelas setelah Anda mempertimbangkan kemungkinan ini.
Masalah yang lebih sulit adalah mengoptimalkan hal ini. Cukup mudah untuk mengoptimalkan jarak absolut pada keyboard. Vim melakukan itu. Jauh lebih sulit untuk mengoptimalkan pada level "run", tetapi vi (m) dengan pengeditan modalnya memberi Anda kesempatan yang lebih baik untuk bisa melakukannya daripada pendekatan non-modal (ahem, emacs) yang pernah ada.
Di Emacs
Supaya para fanatik emacs benar-benar mengabaikan seluruh posting saya karena komentar kurung terakhir, saya merasa saya harus menggambarkan akar perbedaan antara emacs dan agama vim. Saya tidak pernah berbicara dalam perang editor dan saya mungkin tidak akan melakukannya lagi, tetapi saya belum pernah mendengar ada orang yang menggambarkan perbedaannya seperti ini, jadi begini saja. Perbedaannya adalah pengorbanan berikut:
Vim memberi Anda efisiensi pengeditan teks mentah yang tak tertandingi Emacs memberi Anda kemampuan yang tak tertandingi untuk menyesuaikan dan memprogram editor
Fanatik vim buta akan mengklaim bahwa vim memiliki bahasa scripting. Tapi itu adalah bahasa ad-hoc yang tidak jelas yang dirancang untuk melayani editor. Emacs memiliki Lisp! Cukup kata. Jika Anda tidak menghargai pentingnya dua kalimat terakhir atau memiliki keinginan untuk belajar cukup banyak tentang pemrograman fungsional dan Lisp untuk mengembangkan apresiasi itu, maka Anda harus menggunakan vim.
Para fanatik emacs akan mengklaim bahwa emacs memiliki mode viper, dan karenanya merupakan superset dari vim. Tetapi mode viper tidak standar. Pemahaman saya adalah bahwa mode viper tidak digunakan oleh mayoritas pengguna emacs. Karena ini bukan default, sebagian besar pengguna emacs mungkin tidak mengembangkan apresiasi sejati untuk manfaat dari paradigma modal.
Menurut pendapat saya, perbedaan-perbedaan ini bersifat ortogonal. Saya percaya manfaat vim dan emacs seperti yang telah saya nyatakan keduanya valid. Ini berarti bahwa editor utama belum ada. Mungkin benar bahwa emacs akan menjadi platform termudah untuk menjadi basis editor utama. Tetapi pengeditan modal tidak tertanam dalam pola pikir emacs. Komunitas emacs bisa bergerak seperti itu di masa depan, tetapi itu tampaknya tidak terlalu mungkin.
Jadi jika Anda ingin efisiensi pengeditan mentah, gunakan vim. Jika Anda ingin lingkungan terbaik untuk skrip dan pemrograman editor Anda menggunakan emacs. Jika Anda menginginkan keduanya dengan penekanan pada kemampuan diprogram, gunakan emacs dengan mode viper (atau programkan mode Anda sendiri). Jika Anda menginginkan yang terbaik dari kedua dunia, Anda kurang beruntung untuk saat ini.
sumber
Habiskan 30 menit melakukan tutorial vim (jalankan vimtutor alih-alih vim di terminal). Anda akan mempelajari gerakan dasar, dan beberapa penekanan tombol, ini akan membuat Anda setidaknya sama produktifnya dengan vim seperti halnya dengan editor teks yang Anda gunakan sebelumnya. Setelah itu, baca jawaban Jim Dennis lagi :)
sumber
Mampu melakukan pengeditan yang kompleks dan berulang dengan sedikit penekanan tombol (sering menggunakan makro ). Lihatlah VimGolf untuk menyaksikan kekuatan Vim!
Setelah lebih dari sepuluh tahun penggunaan sehari-hari, sulit membayangkan menggunakan editor lain.
sumber
Gunakan
\c
di mana saja dalam pencarian untuk mengabaikan case (mengganti pengaturan ignorecase atau smartcase Anda). Misalnya/\cfoo
atau/foo\c
akan cocokfoo
,Foo
,fOO
,FOO
, dllGunakan
\C
di mana saja dalam pencarian untuk memaksa pencocokan kasus. Misalnya/\Cfoo
atau/foo\C
hanya akan cocok dengan foo.sumber
Saya terkejut menemukan tidak ada yang menyebut
t
gerakan itu. Saya sering menggunakannya dengan daftar parameter dalam bentukdt,
atauyt,
sumber
Aneh, tidak ada yang disebutkan ctag. Unduh "ctag riang" dan letakkan di depan versi jelek yang sudah Anda miliki di jalur pencarian. Cd ke root apa pun yang sedang Anda kerjakan; misalnya distribusi kernel Android. Ketik "ctags -R." untuk membangun indeks file sumber di mana saja di bawah dir dalam file bernama "tag". Ini berisi semua tag, bukan bahasa atau di mana pun dalam dir, dalam satu file, jadi pekerjaan lintas-bahasa itu mudah.
Kemudian buka vim di folder itu dan baca: help ctags untuk beberapa perintah. Beberapa yang sering saya gunakan:
Letakkan kursor pada pemanggilan metode dan ketik CTRL-] untuk pergi ke definisi metode.
Ketik: ta nama untuk pergi ke definisi nama.
sumber
Lekukan otomatis:
gg
(buka awal dokumen)=
(indent time!)shift-g
(pergi ke akhir dokumen)Anda akan memerlukan 'indentasi plugin tipe' pada
.vimrc
file Anda , dan mungkin pengaturan 'shiftwidth' dan 'bentangkan tab' yang sesuai.sumber
Anda bertanya tentang jalan pintas yang produktif, tetapi saya pikir pertanyaan Anda sebenarnya adalah: Apakah vim sepadan? Jawaban untuk pertanyaan stackoverflow ini adalah -> "Ya"
Anda pasti memperhatikan dua hal. Vim kuat, dan vim sulit dipelajari. Sebagian besar kekuatannya terletak pada perluasannya dan kombinasi perintah yang tak ada habisnya. Jangan merasa kewalahan. Lambat. Satu perintah, satu plugin sekaligus. Jangan berlebihan.
Semua investasi yang Anda masukkan ke vim akan membayar seribu kali lipat. Anda akan berada di dalam editor teks selama berjam-jam sebelum Anda mati. Vim akan menjadi temanmu.
sumber
Banyak buffer, dan khususnya lompatan cepat di antara mereka untuk membandingkan dua file dengan
:bp
dan:bn
(dipetakan ulang dengan benar ke satu Shift+ patau Shift+ n)vimdiff
mode (terbagi dalam dua buffer vertikal, dengan warna untuk menunjukkan perbedaan)Salin area dengan Ctrl+v
Dan akhirnya, tab penyelesaian pengidentifikasi (cari "mosh_tab_or_complete"). Itu pengubah kehidupan.
sumber
Setuju dengan poster teratas - the : r! perintah ini sangat bermanfaat.
Paling sering saya menggunakannya untuk "menempelkan" hal-hal:
Dengan cara ini saya tidak perlu mengutak-atik
:set paste
.sumber
clipboard
opsi keunnamed
(set clipboard=unnamed
dalam .vimrc Anda) untuk menggunakan clipboard sistem secara default. Atau jika Anda masih ingin sistem clipboard terpisah dari register disebutkan namanya, menggunakan tepat bernama clipboard mendaftar:"*p
.:set paste
tidak berfungsi dengan baik jika autoindent diaktifkan.