Pertanyaan Apa sudut gelap Vim yang ibumu tidak pernah ceritakan padamu? [Tutup]


Ada banyak sekali pertanyaan di mana orang berbicara tentang trik umum, terutama "Tips dan trik Vim + ctags".

Namun, saya tidak merujuk pada cara pintas yang biasa digunakan sehingga seseorang yang baru mengenal Vim akan merasa keren. Saya berbicara tentang pengguna Unix yang berpengalaman (baik itu pengembang, administrator, keduanya, dll.), Yang mengira mereka tahu sesuatu yang 99% dari kita tidak pernah dengar atau impikan. Sesuatu yang tidak hanya membuat pekerjaan mereka lebih mudah, tetapi juga COOL dan hackish. Lagipula, Vim berada di OS paling gelap di dunia, sehingga harus memiliki seluk-beluk yang hanya diketahui oleh sebagian kecil orang dan ingin berbagi dengan kita.


756


asal


Jawaban:


Mungkin tidak menjadi salah satu yang 99% dari pengguna VIM tidak tahu tentang, tapi itu sesuatu yang saya gunakan setiap hari dan bahwa setiap Linux + Vim poweruser harus tahu.

Perintah dasar, namun sangat berguna.

:w !sudo tee %

Saya sering lupa untuk sudo sebelum mengedit file yang saya tidak memiliki izin menulis. Ketika saya datang untuk menyimpan file itu dan mendapatkan kesalahan izin, saya hanya mengeluarkan perintah vim untuk menyimpan file tanpa perlu menyimpannya ke file temp dan kemudian salin kembali.

Anda jelas harus berada pada sistem dengan sudo diinstal dan memiliki hak sudo.


746



Sesuatu yang baru saja saya temukan baru-baru ini yang saya pikir sangat keren:

:earlier 15m

Kembalikan dokumen kembali ke bagaimana itu 15 menit yang lalu. Dapat mengambil berbagai argumen untuk jumlah waktu yang Anda ingin gulung balik, dan tergantung pada undolevels. Dapat dibalik dengan perintah yang berlawanan :later


581



:! [command] menjalankan perintah eksternal saat Anda berada di Vim.

Tetapi tambahkan satu titik setelah titik dua, :.! [command], dan itu akan membuang output dari perintah ke jendela Anda saat ini. Itu : . ! 

Sebagai contoh:

:.! ls

Saya menggunakan ini banyak untuk hal-hal seperti menambahkan tanggal saat ini ke dalam dokumen yang saya ketik:

:.! date

385



Tidak persis tidak jelas, tetapi ada beberapa perintah "hapus" yang sangat berguna, seperti ..

  • diw untuk menghapus kata saat ini
  • di( untuk menghapus dalam parens saat ini
  • di" untuk menghapus teks di antara tanda kutip

Lainnya dapat ditemukan di :help text-objects


299



de Hapus semuanya sampai akhir kata dengan menekan. sesuai keinginan hatimu.

ci (xyz [Esc] - Ini yang aneh. Di sini, 'i' tidak berarti mode insert. Sebaliknya itu berarti di dalam kurung. Jadi urutan ini memotong teks di dalam kurung Anda berdiri dan menggantikannya dengan "xyz". Ini juga bekerja di dalam persegi dan kurung angka - cukup lakukan ci [atau ci {correspondingly. Secara alami, Anda dapat melakukan di (jika Anda hanya ingin menghapus semua teks tanpa mengetik apa pun. Anda juga dapat melakukannya a dari pada i jika Anda ingin menghapus tanda kurung juga dan bukan hanya teks di dalamnya.

ci " - Memotong teks dalam tanda kutip saat ini

ciw - Memotong kata saat ini. Ini bekerja seperti yang sebelumnya kecuali itu ( diganti dengan w.

C - potong sisa baris dan beralih ke mode insert.

ZZ - simpan dan tutup file saat ini (CARA lebih cepat dari Ctrl-F4 untuk menutup tab saat ini!)

ddp - memindahkan baris saat ini satu baris ke bawah

xp - memindahkan karakter saat ini satu posisi ke kanan

U - huruf besar, jadi viwU upercases kata

~ - switch case, jadi viw~ akan membalikkan casing seluruh kata

Ctrl + u / Ctrl + d gulir halaman setengah layar ke atas atau bawah. Ini tampaknya lebih berguna daripada paging layar penuh biasa karena memudahkan untuk melihat bagaimana kedua layar berhubungan. Bagi mereka yang masih ingin menggulir seluruh layar pada suatu waktu ada Ctrl + f untuk Forward dan Ctrl + b untuk Backward. Ctrl + Y dan Ctrl + E gulirkan ke bawah atau ke atas satu baris pada satu waktu.

Perintah yang gila tapi sangat berguna adalah zz - itu bergulir layar untuk membuat garis ini muncul di tengah. Ini sangat bagus untuk meletakkan potongan kode yang Anda kerjakan di pusat perhatian Anda. Perintah saudara - zt dan zb - buat baris ini di bagian atas atau bawah pada sreen yang tidak begitu berguna.

% menemukan dan melompat ke tanda kurung yang cocok.

de - Hapus dari kursor ke akhir kata (Anda juga bisa melakukannya dE untuk menghapus hingga ruang berikutnya)

bde - hapus kata saat ini, dari kiri ke kanan pembatas

df [spasi] - hapus hingga dan termasuk ruang selanjutnya

dt. - hapus hingga titik berikutnya

DD - hapus seluruh baris ini

kamu (atau ye) - tarik teks dari sini hingga akhir kata

ce - Memotong ujung kata

selamat tinggal - Salin kata saat ini (membuat saya bertanya-tanya apa yang "hai" lakukan!)

Y y - Salin baris saat ini

cc - Memotong garis saat ini, Anda juga bisa melakukannya S sebagai gantinya. Ada juga topi yang lebih rendah s yang memotong karakter saat ini dan beralih ke mode insert.

viwy atau viwc. Yank atau ubah kata saat ini. Memukul w beberapa kali untuk terus memilih setiap kata berikutnya, gunakan b untuk bergerak mundur

vi { - pilih semua teks dalam tanda kurung. va {- pilih semua teks termasuk {} s

vi (hal - sorot semuanya di dalam () dan ganti dengan teks yang ditempelkan

b dan e memindahkan kursor kata demi kata, serupa dengan yang biasanya dilakukan Ctrl + Arrows. Definisi kata sedikit berbeda meskipun, karena beberapa delmiters berturut-turut diperlakukan sebagai satu kata. Jika Anda memulai di tengah kata, menekan b akan selalu membawa Anda ke awal kata saat ini, dan setiap b berturut-turut akan melompat ke awal kata berikutnya. Demikian pula, dan mudah diingat, e mengarahkan kursor ke akhir kata saat ini, dan setiap kata berikutnya.

mirip dengan b/e, modal B dan E memindahkan kata demi kata kursor menggunakan hanya spasi putih sebagai pembatas.

modal D (ambil nafas dalam-dalam) Menghapus sisa baris ke kanan kursor, sama seperti Shift + End / Del pada editor normal (perhatikan 2 tombol yang ditekan - Shift + D - bukan 3)


225



Satu yang jarang saya temukan di sebagian besar tutorial Vim, tetapi sangat bermanfaat (setidaknya bagi saya), adalah

g; and g,

untuk bergerak (maju, mundur) melalui changelist.

Biarkan saya menunjukkan bagaimana saya menggunakannya. Kadang-kadang saya perlu menyalin dan menyisipkan sepotong kode atau string, katakanlah kode warna hex dalam file CSS, jadi saya mencari, melompat (tidak peduli di mana pertandingan itu), salin dan kemudian melompat kembali (g;) ke tempat Saya sedang mengedit kode untuk akhirnya menempelkannya. Tidak perlu membuat tanda. Lebih sederhana.

Hanya 2cents saya.


193



:%!xxd

Buat vim menjadi editor hex.

:%!xxd -r

Kembali.

Peringatan: Jika Anda tidak mengedit dengan biner (-b), Anda dapat merusak file. - Josh Lee di komentar.


182



gv

Memilih kembali pemilihan visual terakhir.


116



Terkadang pengaturan di .vimrc Anda akan ditimpa oleh plugin atau autocommand. Untuk men-debug ini trik yang berguna adalah dengan menggunakan: perintah verbose dalam hubungannya dengan: set. Misalnya, untuk mencari tahu di mana cindent ditetapkan / tidak disetel:

:verbose set cindent?

Ini akan menghasilkan sesuatu seperti:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

Ini juga berfungsi dengan peta dan sorotan. (Terima kasih joeytwiddle untuk menunjukkan ini.) Misalnya:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

113



Tidak yakin apakah ini dianggap sebagai dark-corner-ish sama sekali, tapi saya baru saja mempelajarinya ...

:g/match/y A

akan menarik (menyalin) semua baris yang berisi "cocok" ke dalam "a/@a daftar. (Kapitalisasi sebagai A membuat vim menambahkan yankings bukan menggantikan isi daftar sebelumnya.) Saya menggunakannya banyak baru-baru ini ketika membuat stylesheet Internet Explorer.


97



:%TOhtml

Membuat render html dari file saat ini.


92