Fitur VIM paling berguna yang tidak standar dalam IDE [tertutup]

30

Saya sedang mempertimbangkan apakah saya harus mulai menggunakan VIM lagi daripada IDE. Apa saja fitur VIM paling berguna yang tidak standar dalam IDE?

Casebash
sumber
3
IDE mana yang Anda gunakan? Banyak IDE memiliki plugin VIM sehingga Anda dapat mengedit seolah-olah Anda menggunakan VIM.
Brian R. Bondy
2
@ Brian: Tentunya mereka tidak meniru semua fitur canggih?
Casebash
1
Mungkin tidak semua kecuali yang saya gunakan bagus untuk VS. Setidaknya ada 2 dari mereka. viemu.com dan github.com/jaredpar/VsVim
Brian R. Bondy
2
@Brian R Bondy: Tidak satupun dari mereka yang mendekati semua fitur vim. Mereka menggaruk permukaan dan tidak benar-benar melakukan lagi
Daenyth
2
Atau Anda bisa benar-benar masuk akal dan mulai menggunakannya emacs. ;-)
Orbling

Jawaban:

32

Saya tidak berpikir itu fitur canggih VIM yang membuatnya begitu kuat. Ini adalah fakta bahwa Anda tidak perlu melepaskan keyboard untuk melakukan apa pun. Menemukan sesuatu dalam file besar sesederhana beberapa penekanan tombol. Membuka dan menutup banyak file di jendela yang sama juga sangat cepat.

Meskipun awalnya tidak tampak intuitif, ini sepadan dengan waktu Anda. Bahkan jika Anda tidak menggunakannya sebagai IDE standar Anda (saya biasanya menggunakan Visual Studio atau Eclipse), Anda akan menemukan diri Anda menggunakan VIM untuk dengan cepat membuka dan mengedit file karena itu menjadi jauh lebih cepat daripada menunggu IDE untuk beban.

Investasikan waktu untuk mempelajari cara menggunakan VIM dengan baik dan Anda tidak akan pernah menyesalinya. Saya akan mengatakan itu sebanding dengan belajar untuk tipe sentuh.

Bryan Hales
sumber
3
Jawaban ini mungkin adalah fitur yang paling berguna untuk Vim, ini juga satu-satunya. Apa pun yang diprogram untuk Vim dapat dengan mudah diterapkan pada IDE juga, itu hanya pemrosesan teks saja ...
Tamara Wijsman
4
+1 Sementara saya adalah penggemar emacs, argumen yang sama berlaku. IDE modern terlalu "grafis", untuk editor teks .
Orbling
22

Bagi saya, :globalperintahnya adalah aplikasi pembunuh. Ini akan menjalankan perintah vim arbitrer pada baris apa pun yang cocok (atau tidak cocok) dengan regex.

Berikut ini beberapa contohnya:

Perilaku default adalah mencantumkan setiap baris yang cocok, jadi:

:g/TODO:/

akan mencantumkan setiap baris yang berisi teks "TODO:"

ubah 'Mickey' menjadi 'Minnie' di baris mana pun yang juga mengandung kata 'Mouse'

:g/Mouse/ s/Mickey/Minnie/

Perintah dapat memiliki jangkauannya sendiri, jadi ini akan dihapus dari setiap baris dengan "TODO:" ke baris kosong berikutnya:

: g / TODO: /., / ^ $ / d

Gunakan: g! untuk mengeksekusi pada setiap baris yang TIDAK cocok dengan regex, misalnya untuk mengganti "emacs" dengan "vim" kecuali pada baris yang mengandung kata "sucks":

:g!/sucks/ s/emacs/vim/
Dave Kirby
sumber
Trik hebat dengan perintah global! Saya tidak pernah berpikir untuk menggunakannya seperti itu.
Xavier T.
Eclipse mendukung pencarian regex file, baik sebagai file individual, proyek, atau seluruh proyek di ruang kerja yang sama. Penggantian regex juga didukung sampai batas tertentu, tetapi saya percaya vim memiliki kemampuan regex yang jauh lebih kuat.
Thomas Owens
16

Saya menemukan kemampuan untuk menghapus semuanya di antara satu set simbol pasangan yang sangat berguna. Misalnya, cukup sering, saya akan menemukan diri saya ingin mengganti string dalam kode. Jadi, di"saat kursor berada di blok akan menghapus string, sambil menjaga ""intak, dan menempatkan kursor di antara dua karakter kutipan. da"melakukan hal yang sama, tetapi menghapus karakter kutipan juga.

Chinmay Kanchi
sumber
12
Bahkan lebih baik, ci"menghapus, dan menempatkan kursor dalam mode penyisipan sehingga Anda dapat segera mulai menulis.
Konrad Rudolph
9

'Penyelesaian kata kunci mode penyisipan'. Ctrl-P dan Ctrl-N dalam mode sisipkan untuk mencari melalui teks untuk mencoba dan menyelesaikan nama variabel apa pun yang Anda ketikkan. Saya belum pernah melihat ini di IDE lain dan saya sangat merindukannya. Kelengkapan kode di IDE tidak sama.

Lang Sharpe
sumber
2
Anda juga memiliki penyelesaian kode yang tepat jika Anda mau, menggunakan omni-complete. ^X^Oomni-selesai dalam mode penyisipan, jika Anda mengaktifkannya. Tapi Anda benar, saya menemukan diri saya menggunakan penyelesaian kata kunci jauh lebih dari omni-complete.
Chinmay Kanchi
@ Cinmay: Saya pikir Anda memiliki arti "tepat" mundur. Penyelesaian kode yang tepat menyelesaikan apa pun menggunakan prinsip lokalitas, bahkan jika Anda menulis teks alih-alih kode.
ninjalj
SlickEdit memiliki fitur serupa; dan itu sangat seperti IDE
user281377
8
Saya sangat tidak setuju. IDE modern (Visual Studio, Eclipse, ...) memiliki semacam penyelesaian kode yang menyaingi (dan bahkan melampaui!) Ctrl-N dengan mudah . Jika Anda belum melihat ini di IDE, lihat lagi di versi saat ini. Dan Omni-Complete sayangnya tidak berfungsi dengan baik.
Konrad Rudolph
8

Fitur lain yang saya temukan sangat berguna adalah kemampuan untuk mengubah indentasi. :15,30>>indentasi semua baris dari 15-30 (termasuk) dua kali, sedangkan :15,30<<de-indentasi baris yang sama dua kali.

Chinmay Kanchi
sumber
Walaupun saya menyukai fitur ini, hampir setiap IDE memiliki blok indent (dan dedent).
Sean McMillan
Saya menemukan =sama, jika tidak lebih, berguna daripada <<dan >>.
greyfade
6

perintah dd (hapus baris saat ini). Saya menggunakan ini begitu banyak.

Juga, bisa mengetikkan sesuatu seperti 3dd dan menghapus 3 baris berikutnya sangat bagus. Saya belum pernah melihat ini di editor lain = D

Alex Hart
sumber
Netbeans hampir memiliki ini, ^ X tanpa pilihan akan memotong garis saat ini.
Alan Pearce
@Lan: Tidak, NetBeans punya jVi :)
dr Hannibal Lecter
^ K menghapus baris dan ^ u3 ^ k akan menghapus 3 baris di emacs. shift-delete melakukan hal yang sama di studio visual.
Raoul
Alan: dd juga memotong garis saat ini dalam arti bahwa itu dapat dimasukkan dengan p nanti
user281377
3
@ Raoul, kita tahu ada serangkaian emacs kombinasi n-tombol 3 untuk mereplikasi setiap perintah vim - masih, 3dd adalah puisi.
cbrandolino
6

The cperintah. Misalnya, ci"untuk mengubah kutipan di dalam. cwuntuk mengubah kata. Banyak trik berguna dengannya.

Daenyth
sumber
5

The .perintah. Itu mengulangi perintah terakhir.

Adam Jaskiewicz
sumber
Memberi +1 untuk ini, dan semua fungsi terkait makro lainnya.
P Shved
3

Esc ! }akan mendorong paragraf saat ini ke filter baris perintah seperti fmtatau wcatau whichdan mengembalikan hasil ke editor.

Jé Queue
sumber
3

Akses cepat ke baris perintah. CTRL + Z atau: wqa akan memberi saya baris perintah dalam waktu kurang dari 1 detik tanpa tangan saya meninggalkan keyboard.

luispedro
sumber
1
+1 Itu sedikit terakhir adalah bagian penting untuk hampir semua manfaat: tanpa tangan saya meninggalkan keyboard
Orbling
... Atau :!/bin/bash. Saya :!cukup sering menggunakan .
greyfade
Saya biasanya menggunakan:sh
David Brown
3

Itu bisa saya gunakan hjkluntuk memindahkan kursor tanpa harus meninggalkan homerow keyboard. Saya memiliki sebagian besar program (seperti pembaca PDF), yang memungkinkan Anda mengubah ikatan kunci, diatur untuk menggunakan tombol gerakan Vim untuk menggulir dll.

Anto
sumber
1

Ini agak sulit untuk dijawab, karena agak ketidakjelasan pertanyaan, dan agak karena fakta bahwa IDE berbeda, dan banyak yang menyediakan fitur yang tidak (dan fakta bahwa saya hanya beberapa dari mereka).

Namun, apa yang saya yakini membedakan Vim dari editor lain (ya, bahkan Emacs, untuk yang satu ini) adalah bahwa ia benar-benar editor hebat . Saya telah melewati waktu, menggunakan banyak editor, dan dapat dengan jujur ​​mengatakan bahwa sangat sedikit yang datang dengan seperangkat fitur lengkap untuk memanipulasi teks, seperti yang dilakukan Vim.

Gaya saya memanipulasi teks misalnya, termasuk sangat sering menggunakan duplikasi (baris / pemilihan beberapa baris), dan bergerak (baris / pemilihan beberapa baris) ke atas dan ke bawah, yang sudah lama saya tentukan cara pintas cepat. Saya kehilangan fitur-fitur di sebagian besar IDE (walaupun saya pernah mendengar ReSharper untuk VS memiliki sesuatu yang serupa).

Benteng
sumber
1

Tahukah Anda bahwa ada plugin vi untuk gerhana ? Harganya 15 euro (US $ 20-an) tetapi sangat berharga. Tidak ada lagi dddi tengah-tengah dokumen, dan kehilangan semua hal-hal kecil yang bermanfaat.

Mungkin sedikit keluar dari topik tetapi saya pikir itu layak untuk ditunjukkan.

lorenzog
sumber
0

Bergantung pada bahasa apa yang Anda pemrograman, tetap dengan ide, atau mendapatkan ide yang menawarkan refactoring paling banyak yang dapat Anda temukan, dapatkan resharper untuk studio visual jika Anda melakukan c #, intellij untuk java, atau bantuan visual untuk studio visual, maks refactorings dalam gerhana atau netbeans.

Kita harus beralih dari memanipulasi teks ke memanipulasi kode, alat refactoring memberi Anda kemampuan itu. Jika vim memang memberi Anda semua fitur baik-baik saja, saya untuk satu tidak benar-benar ingin berurusan dengan editor teks lagi

Harald Scheirich
sumber
3
Ini omong kosong. Ya, refactoring adalah alat yang penting, tetapi kode tidak menulis sendiri. Sebuah editor yang baik teks kontribusi jauh lebih banyak untuk produktivitas programmer daripada alat yang baik refactoring.
Chinmay Kanchi
-1

Pilih Kolom Tabel

Ini sepertinya tidak ada dalam IDE yang populer, dan jika itu mereka tetap menyembunyikannya dengan baik. Ini sangat berguna untuk menguji regex terhadap kolom dalam file data CSV.

sal
sumber
-3

Sebagian besar IDE tidak memungkinkan Anda untuk membagi layar. Saya suka fitur itu di VIM.

projecktzero
sumber
5
Kebanyakan IDE tidak? Saya pikir sebagian besar benar-benar melakukannya, setidaknya yang telah saya gunakan.
Anto
Bisakah Anda memberikan beberapa contoh?
projecktzero
1
Sebagian besar pegangan layar IDE berbeda dari Vim / Emacs. Mereka melakukannya dengan tab biasanya. Ini lebih sulit / mustahil untuk dimanipulasi dengan keyboard (bandingkan memiliki 50 file terbuka di Emacs vs memiliki 50 file terbuka di Eclipse dan Anda akan segera melihat Emacs menang).
jsternberg
Sebagian besar IDE yang memiliki splitscreen tidak menyediakan metode navigasi / penyesuaian a-la yang mudah<C-w>
Wayne Werner