Perintah Vim sederhana yang Anda ingin Anda ketahui sebelumnya [ditutup]

378

Saya belajar perintah baru di Vim sepanjang waktu, tapi saya yakin semua orang belajar sesuatu yang baru sesekali. Saya baru saja belajar tentang ini:

zz, zt, zb - kursor posisi di tengah, atas, atau bawah layar

Apa saja perintah lain yang berguna atau anggun yang Anda harap Anda pelajari beberapa waktu yang lalu?

Lin
sumber
46
secara teknis, zz, zt, zb memposisikan layar dengan kursor di tengah / atas / bawah. untuk memposisikan kursor di tengah / atas / bawah gunakan M, H, atau L. Kedua set perintah berguna!
Peter
1
Membaca posting ini berbulan-bulan atau setahun yang lalu telah membantu saya setiap hari. dap adalah sesuatu yang saya gunakan untuk memindahkan paragraf beberapa kali dalam satu jam, terima kasih untuk posting ini.
Funkodebat
33
Saya tidak pernah mengambil begitu banyak trik dari halaman yang telah ditandai sebagai tidak konstruktif :) Terima kasih semua.
Tasos Bitsios

Jawaban:

315

Saya benar-benar berharap saya tahu bahwa Anda dapat menggunakan CtrlCalih-alih Escberalih dari mode insert. Itu merupakan peningkatan produktivitas nyata bagi saya.

yalestar
sumber
93
Saya memetakan kembali Caps-Lock saya ke Esc. Itu baik lebih mudah daripada Esc normal dan Ctrl-C
Kasper
114
Omong kosong 15 tahun vi dan saya tidak pernah tahu ini ...
Chris K
31
Populer lainnya adalah menggunakan 'jj' untuk ESC. Saya suka pendekatan ini sejauh ini. :peta! jj <ESC>
claytron
27
Anda juga dapat menggunakan CTRL- [(yang saya suka karena itu kedua jari kecil ... hanya sedikit rotasi kedua tangan).
Jason Down
42
gunakan 'jk' sebagai varian pada @ claytron's. jika Anda tanpa sadar sudah dalam mode INSERT, jk meninggalkan Anda di tempat Anda berada, sehingga Anda dapat menekannya kapan saja (kredit: orang lain ... bukan ide saya).
Kyle
197

Trik "wow" terbaru yang saya pelajari adalah metode melakukan pencarian-dan-ganti yang rumit. Cukup sering di masa lalu, saya memiliki regexp yang sangat rumit untuk melakukan penggantian dan itu tidak berfungsi. Ada cara yang lebih baik:

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

"Trik" di sini (untuk menginginkan kata yang lebih baik) adalah cara Anda dapat menggunakan pencarian untuk membuat regexp (dan 'incsearch' menyorotinya saat Anda memasukkan karakter) dan kemudian menggunakan pola kosong di substitusi: kosong default pola ke pola pencarian terakhir.

Contoh:

/blue\(\d\+\)
:%s//red\1/

Setara dengan:

:%s/blue\(\d\+\)/red\1/

Lihat:

:help 'incsearch'
:help :substitute
DrAl
sumber
1
wow ... Saya sudah mencari sesuatu seperti ini
figurassa
1
ya, aku berharap aku tahu tentang ini lebih cepat. Tetapi sekali lagi, itulah yang saya katakan tentang semua yang saya pelajari yang baru di vim.
Robert Massaioli
26
Bagi siapa pun yang benar-benar mencintai ini, coba tekan <Ctrl-R>/untuk memasukkan kueri pencarian terakhir. (Lihat :help i_CTRL-R) Sangat berguna untuk mirip dengan di atas, tetapi Anda ingin menangkap bagian dari hasil pencarian. (seperti ini: %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii
4
:%s//...juga berfungsi dengan *(mencari kata di bawah kursor). Plugin yang disebut visual-star-search memperluas fungsionalitas *untuk mencocokkan seluruh teks dari pilihan visual yang membuatnya mudah untuk mencari & mengganti teks yang dipilih, misalnya v3e(pilih secara visual 3 kata) *(pencarian) dan :%s//replacement/g(ganti semua kejadian dengan " penggantian"). Saya menggunakan ini begitu sering bahwa saya memiliki pemetaan untuk perintah substitusi global yang: :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity
1
@idbrii karena orang yang membaca mungkin adalah Vim noobs (saya), %s:seharusnya :%s, dan untuk sistem saya, saya membutuhkannya \(\)daripada\\(\\)
Charlie Gorichanaz
155

Saya membuat referensi ini dari perintah saya yang paling sering digunakan untuk seorang teman saya:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
newman brian
sumber
Anda daftar "~ X" untuk pergi ke tanda dengan nama X. Itu tidak berhasil bagi saya - sebagai gantinya saya menggunakan "'X" (kutipan tunggal).
Wow. Anda benar sekali. Ketika saya mengetik panduan, saya kira mata saya hanya melihat tilde dan dipoleskan pada centang belakang. Saya akan memperbarui yang sesuai. Terimakasih atas peringatannya.
brian newman
5
daftar ini bagus, tetapi saya benar-benar ingin tahu bagaimana Anda menggambar tabel ini? dengan VIM? plugin yang mana? Saya sedang mencari satu saat ini.
Kent
6
Saya menggunakan VIM, tetapi tidak ada plugin. Namun; menggunakan fitur blok pilih membuatnya relatif mudah. Senang Anda menemukan daftar berguna! ~ brian
newman brian
11
Ctrl-Q untuk pemilihan blok adalah kekhususan mswin.vim yang memungkinkan CTRL-V untuk menempel. Sebagian besar pengguna vim akan menganggap ini jahat dan menonaktifkan mswin.vim. "+ P atau Ctrl-R + tidak terlalu sulit untuk mengetik untuk memasukkan konten clipboard.
Benoit
144

gi beralih ke mode penyisipan, menempatkan kursor di lokasi yang sama seperti sebelumnya.

Cyber ​​Oliveira
sumber
29
Saya sangat senang ketika tahu tentang g;sekarang ini membuat saya menangis :-)
Patrick Oscity
@longdeqidao tidak sama sekali. Ia kembali ke titik penyisipan terakhir. Jadi Anda dapat menggulir isi isi hati Anda dan itu akan menarik Anda kembali ke tempat Anda memasukkan terakhir.
Cyber ​​Oliveira
9
FYI, g; (yang @PatrickOscity disebut di atas) menempatkan kursor di tempat pengeditan dibuat. Anda dapat menggunakannya beberapa kali untuk kembali dalam sejarah. Memperhatikan hal ini di sini karena bantuan vim saya tidak menyebutkan ini karena beberapa alasan aneh.
PonyEars
13
Keintiman Vim tidak pernah berhenti mengesankan saya. Karena @PonyEars menyebutkan g;saya mencoba jika "lawannya" adalah g,dan lihatlah, kita bisa maju dan mundur!
Cyber ​​Oliveira
alebih pendek. :) Tetapi gimemang sangat intuitif, dengan gbiasanya menjadi operasi yang berlawanan.
Erwin Rooijakkers
105
: q!

Saya berharap saya tahu itu sebelum saya mulai vi untuk pertama kalinya.

Peter Mortensen
sumber
23
sebagai seorang cowok emacs, itu adalah komentar terlucu yang pernah saya baca. tidak yakin Anda memang begitu. Kamu membuatku bahagia hari ini.
pjammer
29
Saya ingat mencoba vim dan emacs untuk pertama kalinya pada hari yang sama, tidak tahu cara keluar juga. Aku berpikir dalam hati, apa yang salah dengan orang-orang ini !?
physicsmichael
13
+1. Pertama kali Anda memulai vim, pesan defaultnya adalah "tulis: q untuk keluar". Saya akan menghemat banyak waktu lol
José Ramón
2
@ JoséRamón Tapi itu tidak menunjukkan di layar secara default jika Anda memasukkan vim tanpa membuka file. Apakah ini ditambahkan baru-baru ini? Saya ingat dengan jelas mencoba vim tahun yang lalu dan sudah ada di sana. Ini juga memberi tahu Anda untuk menggunakan :q!jika Anda mencoba berhenti tanpa menyimpan buffer.
mechalynx
5
@ivy_lynx ya, Anda mungkin benar, tetapi hanya jika Anda membuka vim tanpa file. Biasanya, pertama kali Anda membuka vim adalah karena Anda perlu mengedit file config di Unix, jadi Anda menulis "$ vim file" dan Anda tidak dapat menemukan jalan keluar. Atau hanya aku satu-satunya?
José Ramón
56

^ XF selesai menggunakan nama file dari direktori saat ini. Tidak ada lagi menyalin / menempel dari terminal atau memeriksa ganda menyakitkan.

^ XP selesai menggunakan kata-kata dalam file saat ini

: set scrollbind memaksa satu buffer untuk menggulir di samping buffer lain. misalnya, membagi jendela Anda menjadi dua panel vertikal. Muat satu file di masing-masing (mungkin versi berbeda dari file yang sama). Lakukan :set scrollbinddi masing-masing. Sekarang saat Anda menggulir dalam satu, kedua panel akan menggulir bersama. Ideal untuk membandingkan file.

Brian Agnew
sumber
Bagaimana cara menonaktifkan scrollbind setelah saya mengaktifkannya?
Amjith
2
jinxed_coder : :set noscbuntuk mematikannya dan gunakan :set scbuntuk menyalakannya (tidak :scrollbind). :h scrollbind
jmdeldin
Aduh. Dikoreksi untuk ': atur scrollbind'.
Brian Agnew
7
^ XP dilengkapi dengan preferensi untuk kata-kata sebelumnya dalam file, ^ XN dengan preferensi untuk kata-kata berikutnya dalam file.
u0b34a0f6ae
Anda juga dapat melakukan diff file dengan membuka file1 dan menjalankan :diffsplit file2atau hanya memulai dengan vim -d file1 file2. Vim secara otomatis menggulir kedua file.
Brian McCutchon
51

Anda dapat menggunakan seluruh rangkaian perintah untuk mengubah teks di dalam tanda kurung / tanda kurung / tanda kutip / tag. Sangat berguna untuk menghindari keharusan menemukan awal dan akhir grup. Coba ci(, ci{, ci<, ci", ci', cttergantung pada objek apa yang ingin Anda ubah. Dan ca(, ca{, ...varian menghapus tanda kurung / tanda kutip juga.

Mudah diingat: ubah pernyataan di dalam tanda kurung / ubah pernyataan tanda kurung.

Peter
sumber
16
ini bukan hanya untuk c. Anda dapat melakukan ini dengan dmenghapus (misalnya di (atau da (), yuntuk menarik, vuntuk memilih dll.)
Nathan Fellman
Halo! Saya ingin tahu ada dokumentasi yang digunakan untuk ini :help? Saya tidak dapat menemukannya di mana pun. > _ <
Matej
1
@ Peter Saya sudah memeriksa yang sebelumnya, tetapi tidak dapat menemukan menyebutkan perilaku "pembatas +" aneh. Ternyata berada di :help motion.txt! Terima kasih!
Matej
2
tip ini adalah satu-satunya alasan mengapa saya beralih ke vi di tempat pertama :)
Justin L.
1
Jika Anda mengedit HTML atau XML, Anda dapat menggunakan cituntuk mengubah konten dari tag saat ini. Misalnya dalam <span>Some text</span>, jika kursor Anda lebih dari "m" yang dapat Anda lakukan dituntuk mendapatkan <span></span>.
Jonathan Potter
47
  1. Jangan Escpernah menekan . Lihat jawaban ini untuk mempelajari alasannya . Seperti disebutkan di atas, Ctrl+ Cadalah alternatif yang lebih baik. Saya sangat menyarankan memetakan Caps Lockkunci Anda untuk melarikan diri.

  2. Jika Anda mengedit bahasa yang kompatibel dengan Ctags , menggunakan file tag dan :ta, Ctrl+ ], dll. Adalah cara yang hebat untuk menavigasi kode, bahkan di banyak file. Juga, Ctrl+ Ndan Ctrl+ Ppenyelesaian menggunakan file tag adalah cara yang bagus untuk mengurangi penekanan tombol.

  3. Jika Anda mengedit garis yang dibungkus karena lebih lebar dari buffer Anda, Anda dapat bergerak naik / turun menggunakan gk dan gj.

  4. Cobalah untuk fokus pada penggunaan perintah gerak yang efektif sebelum Anda mempelajari kebiasaan buruk. Hal-hal seperti menggunakan 'dt' atau 'd3w' alih-alih menekan xa berkali-kali. Pada dasarnya, setiap kali Anda menemukan diri Anda menekan tombol yang sama berulang kali, mungkin ada cara yang lebih baik / lebih cepat / lebih ringkas untuk mencapai hal yang sama.

anthony
sumber
11
Jangan gunakan Escape? Itu bid'ah. Melarikan diri adalah teman baik Anda, baik di dalam maupun di luar pekerjaan.
xcramps
28
jika itu teman yang baik, mengapa begitu jauh di keyboard?
anthony
karena 99% orang tidak pernah menggunakannya.
Stefano Borini
5
Escape dipisahkan dari tombol lain dengan beberapa inci pada keyboard saya. Anda tidak bisa melewatkannya.
Brian Carper
15
# 3 mengagumkan! Masih belajar hal-hal baru ...
brian newman
45

Tombol tanda bintang *,, akan mencari kata di bawah kursor.

[+ Tabakan membawa Anda ke definisi fungsi C yang ada di bawah kursor Anda. (Namun, itu tidak selalu berhasil.)

smcameron
sumber
1
Coba 'man ctags' jika Anda menggunakan * nix untuk mempelajari cara membuat file "tag" yang memberitahu vim cara menemukan definisi fungsi atau variabel dalam banyak bahasa selain C. Gunakan ctrl +] untuk menemukan definisi dari token di bawah kursor Anda, atau gunakan: tag tokenToFind untuk menemukan token yang diketahuinya. Anda bahkan dapat memulai vim dengan "vim -t tokenToFind" untuk membuka file yang sesuai dan posisikan kursor pada fungsi yang perlu Anda edit.
Adam Liss
23
tombol # akan mencari arah sebaliknya untuk kata di bawah kursor
Funkodebat
github.com/bronson/vim-visual-star-search memungkinkan pencarian bintang untuk pemilihan visual. Saya tidak ingin ketinggalan lagi.
Patrick Oscity
[ + Tab akan bekerja selalu ketika Anda memperpanjang pathdengan folder yang diperlukan sepertiset path+=path/to/files
dlmeetei
43

ZZ(bekerja seperti :wq)

Dan tentang posisi kursor: Saya menemukan bahwa kursor yang selalu berada di tengah layar keren -

set scrolloff=9999
maykeye
sumber
2
Tidak tahu itu. :xmelakukan itu juga
sa125
18
Tidak sepenuhnya akurat. Bekerja seperti :x, yang hanya menyimpan file jika ada perubahan, sedangkan:wq selalu menyimpan file.
Erik B
ZQ (berfungsi seperti: q!)
xialu
42

Beberapa tambahan terbaru saya untuk Vim brainstore saya:

  • ^wi: Langsung ke tag di bawah kursor dengan memisahkan jendela.
  • cib/ciB: Ubah teks di dalam set kurung () atau kurung {}, masing-masing saat ini.
  • :set listchars=tab:>-,trail:_ list: Tampilkan tab / spasi tambahan yang secara visual berbeda dari spasi lainnya. Ini sangat membantu dengan pengkodean Python.
Walter
sumber
4
Ini membutuhkan lebih banyak suara! cibbagus.
Matt Parker
juga: ciw untuk mengubah kata saat ini (atau gak, yang sama tetapi hanya tangan kiri) ciW untuk mengubah W saat ini = o. (rd) Sames dengan v bukannya c akan memilih dalam visual bukannya mengganti
lajarre
5
cib setara dengan mengetikkan "ci (". Anda juga dapat melakukan "ci [", "ci {", atau (jika vimrc Anda diatur dengan benar) "ci <", untuk jenis kurung lain.
Tom Lord
2
Juga, "cit" untuk mengubah teks di dalam tag. Sangat berguna saat bekerja dengan XML / HTML.
Walter
Anda juga harus menyebutkan bahwa Anda dapat menggunakan suffix dengan brace penutup, jika Anda menginginkannya. juga, saya baru saja belajar tentang ci}& cit- wow, ini akan sangat berguna. vi[m]membuktikan program yang sangat menarik!
underscore_d
37

gv memulai mode visual dan secara otomatis memilih apa yang sebelumnya Anda pilih.

terlalu banyak php
sumber
34

: shell untuk meluncurkan konsol shell dari Vim. Berguna ketika misalnya Anda ingin menguji skrip tanpa berhenti Vim. Cukup tekan ^ d ketika Anda selesai dengan konsol shell, dan kemudian Anda kembali ke Vim dan file yang diedit.

peroumal1
sumber
Saya kira :!shitu terlalu sulit. Saya lebih suka itu karena lebih mudah untuk membuat baris perintah menggunakan register / penyelesaian dari buffer saat ini atau misalnya menggunakan %/ %:huntuk nama file / dirname saat ini dll
lihat
1
Yang ini sangat keren. Saya menggunakannya setiap hari .. Sebelum itu,: wq, lakukan hal-hal cli, buka kembali vim dengan file yang sama .. Optimasi hebat
Flashin
7
Ctrl-Z untuk beralih ke shell dan fg <ENTER> untuk kembali ke vim.
Mario G.
Masukan map <Esc>! :shell<CR>dalam Anda .vimrc, dan Anda dapat memulai shell hanya dengan Alt + !, atau Alt + Shift + 1. (Mnemonic: :!{cmd}dieksekusi {cmd}dengan shell.)
musiphil
:shellakan memulai level shell bersarang baru. Padahal ctrl-ztidak.
wisbucky
32

Ini selalu menghiburku:

:help 42
dogbane
sumber
31

enkripsi

vim -x filename.txt

Anda akan diminta untuk memasukkan frasa sandi, mengedit dan menyimpan. Sekarang setiap kali Anda membuka file in vi lagi Anda harus memasukkan kata sandi untuk dilihat.

anteatersa
sumber
Sinkronkan ini dengan dropbox Anda dan Anda mendapatkan pengelola kata sandi yang sangat bagus ;-)
Luis Nell
15
Tetapi perhatikan bahwa kecuali Anda set cryptmethod=blowfish(hanya tersedia dalam 7,3+) itu akan menggunakan algoritma dengan kekuatan menggelikan. Lihat help encryptionuntuk lebih detail.
AB
3
Tolong jangan gunakan enkripsi vim, ini bukan enkripsi yang baik, dan keamanan yang buruk lebih buruk daripada tidak sama sekali. Info lebih lanjut: github.com/neovim/neovim/issues/694
rodrigoq
2
dgl.cx/2014/10/vim-blowfish meta-tldr: "diperbaiki di Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] , untuk alasan kompatibilitas yang dibutuhkannya untuk menjadi cryptmethod baru, jadi gunakan :set cm=blowfish2"
underscore_d
28

Bangun dan debug kode Anda dari dalam Vim!

Konfigurasi

Tidak banyak, sungguh. Anda memerlukan Makefiledi direktori saat ini.

Untuk Mengkompilasi

Saat Anda berada di Vim, ketikkan :makeuntuk memanggil shell dan buat program Anda. Jangan khawatir ketika output bergulir; cukup tekanEnter ketika sudah selesai untuk kembali ke Vim.

Sihir

Kembali dalam Vim, Anda memiliki perintah berikut yang Anda inginkan:

  1. :cl daftar kesalahan, peringatan, dan pesan lainnya.
  2. :ccmenampilkan pesan kesalahan / peringatan saat ini di bagian bawah layar dan melompat ke baris yang menyinggung dalam kode Anda.
  3. :cc nmelompat ke pesan nth .
  4. :cn maju ke pesan berikutnya.
  5. :cp melompat ke pesan sebelumnya.

Masih ada lagi; jika Anda tertarik, ketikkan :help :ccdari dalam Vim.

Adam Liss
sumber
1
bekerja dengan lebih dari sekedar kompilasi kode. Yaitu setiap tugas yang ditulis dalam makefile sangat berguna untuk ini.
Dwight Spencer
25

^ 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" di dekat "O").

Saat Anda melakukan pencarian, mengedit file, dll., Anda dapat menavigasi melalui "lompatan" ini maju dan mundur.

Tanda

Tekan ma (tanda m , a - nama merek). Kemudian untuk kembali ke posisi, ketik `a .

dimba
sumber
1
Wow, saya tidak tahu tentang ^ O dan ^ I: itu mengagumkan. Mungkin bernilai termasuk :help jump-motionsdll dalam jawaban Anda jika ada yang ingin informasi lebih lanjut.
DrAl
lihat ShowMarks vim.org/scripts/script.php?script_id=152 . Ini akan membantu Anda mengingat di mana dan apa semua tanda Anda berada di buffer. Anda dapat mengaktifkan dan menonaktifkan visualisasi dengan \ mt
tester
Saya tidak mendapatkan perbedaan antara ^ P dan ^ N ...
lajarre
@ lajarre mereka menelusuri daftar penyelesaian yang tersedia di arah yang berlawanan
Patrick Oscity
2
Saya sering menggunakan ^ O ^ O ketika membuka Vim setelah saya perhatikan bahwa saya ingin mengedit file yang terakhir diedit lagi. Penghemat waktu yang sangat besar!
Patrick Oscity
24

Tekan %ketika kursor berada pada kutipan, tanda kurung, kurung, atau kurung untuk menemukan pasangannya.

Adam Liss
sumber
20
Jika kursor tidak melebihi salah satu dari itu, ia bergeser ke kanan sampai menyentuh salah satunya.
Cyber ​​Oliveira
@ Léo: Terima kasih atas tip bonusnya!
Adam Liss
22

Hingga [karakter] ( t). Ini berguna untuk perintah apa pun yang menerima rentang. Favorit saya adalah ct;atau ct)yang menghapus semuanya hingga tanda koma / tanda kurung penutup dan kemudian menempatkan Anda dalam mode sisipkan.

Juga, Gdan ggberguna (masing-masing Ke bawah dan atas).

MighMoS
sumber
yang terbaik di sini, meskipun beberapa yang lain juga berguna, saya baru tahu tentang mereka semua
Funkodebat
1
Juga falih-alih t, yang akan [beraksi] melalui karakter itu; misalnya, memiliki kursor di awal argumen fungsi, df,akan menghapusnya (dalam bahasa yang sesuai, tentu saja).
Actorclavilis
t dan f sangat bagus untuk mengedit bagian dari variabel camelCase. Misalnya, jika Anda hanya menduplikasi baris dan perlu mengubah firstVariable ke secondVariable, posisikan kursor Anda di awal firstVariable, lalu ctV
Greg
1
T dan F juga berfungsi, tetapi berlawanan arah.
Fede
20

^r^w untuk menempelkan kata di bawah kursor dalam mode perintah.

Ini sangat berguna saat menggunakan grep atau mengganti perintah.

Peter Mortensen
sumber
Jika itu satu-satunya kata yang Anda inginkan, maka * dalam mode normal akan mencari kata di bawah kursor.
idbrii
17

Mengetik nomor baris diikuti oleh ggakan membawa Anda ke baris itu.

xastor
sumber
31
: diikuti oleh nomor baris melakukan hal yang sama: 42 pergi ke nomor baris 42
Anti Veeranna
12
Mengetik nomor baris diikuti oleh G memiliki efek yang sama.
Cyber ​​Oliveira
3
<number>gopergi ke <number>karakter th dalam file.
Actorclavilis
17

Saya berharap saya tahu hal-hal modus blok visual dasar sebelumnya. Bahkan jika Anda tidak menggunakan Vim untuk hal lain, itu bisa menghemat waktu untuk membuka file di Vim hanya untuk beberapa operasi blok. Saya cukup yakin saya membuang banyak waktu melakukan hal semacam ini secara manual.

Contoh yang saya temukan sangat berguna, ketika, katakanlah, refactoring daftar nama konstanta simbolis secara konsisten:

Masuk ke mode Blok Visual ( Ctrl+ Quntuk saya di Windows, bukan Ctrl+ V)

Gerakkan kursor untuk menyorot blok yang diinginkan.

Lalu, I whatever textdan tekanEsc untuk memasukkan teks di depan blok pada setiap baris.

Gunakan Asebagai gantiI agar teks dimasukkan setelah blok pada setiap baris.

Juga - hanya dengan mengganti kasus pemilihan visual dengan ~bisa menjadi penghemat waktu yang besar.

Dan menghapus kolom juga, dtentu saja.

Anon
sumber
15

^ y akan menyalin karakter di atas kursor.

innaM
sumber
6
... dan ^ E akan memasukkan karakter di bawah kursor
terlalu banyak php
tidak berfungsi untuk saya, itu hanya memindahkan kursor ke awal teks
Alex
14

q <letter> - merekam makro.

dan

@ <same-letter> - memutarnya kembali.

Sejauh ini, ini adalah perintah yang paling berguna di Vim karena Anda dapat membuat komputer melakukan banyak pekerjaan untuk Anda, dan Anda bahkan tidak perlu menulis program atau apa pun.

leeand00
sumber
Penggunaan qhal-hal yang disederhanakan, tetapi Anda tidak diharuskan untuk menggunakannya: cukup simpan ke dalam buffer yang dinamai perintah buffer "- misalnya, menggunakan buffer a- "ad$...
Mei
@Mei qmerekam makro; makro dapat berisi perintah, bukan hanya teks, jadi "ad$berbeda dari qa.
Brian McCutchon
@Sortofabeginner Itu tidak relevan di sini. Perintah "ad $ menempatkan teks ke dalam buffer a dan qa menjalankannya.
Mei
2
@Mei qatidak menjalankannya; qamencatat dan @amenjalankannya. Memang benar bahwa Anda dapat menulis makro dalam teks biasa, menyimpannya dalam register adengan sesuatu seperti "ad$, dan kemudian menjalankannya dengan @a, tetapi ini sedikit lebih banyak pekerjaan. Ada perbedaan mendasar antara cut-and-paste dan record-and-run.
Brian McCutchon
Doh! Saya tahu itu. Terima kasih atas koreksi
Mei
13

Membuka banyak file menggunakan tab

:tabe filepath

Menavigasi antara file yang terbuka

gt and gT or :tabn and :tabp

Simpan sesi terbuka sehingga Anda bisa kembali ke daftar file yang terbuka nanti

:mksession session_file_name.vim

Buka sesi yang dibuat

vim -S session_file_name.vim

Tutup semua file sekaligus

:qa

Perintah lain yang saya pelajari baru-baru ini

autocmd

Ini memungkinkan Anda untuk menjalankan perintah pada suatu acara, jadi Anda bisa misalnya menjalankan perintah make ketika Anda menyimpan file menggunakan sesuatu seperti:

:autocmd BufWritePost *.cpp :make
Mansuro
sumber
12

qx akan mulai merekam penekanan tombol. Anda dapat melakukan hampir semua tugas pengeditan dan Vim mengingatnya. Tekan q lagi saat Anda selesai, dan tekan @x untuk memutar ulang penekanan tombol Anda. Ini bagus untuk pengeditan berulang yang terlalu rumit untuk menulis pemetaan. Anda dapat memiliki banyak rekaman dengan menggunakan karakter selain x .

terlalu banyak php
sumber
5
Juga karakter yang sama 'x' dibagi antara perintah makro 'q' record dan clipboard bernama ("x ...). Anda dapat meninggalkan potongan makro di sekitar file Anda dan menyalinnya ke clipboard bernama (misalnya" xyy ) dan kemudian putar kembali (@x).
Cyber ​​Oliveira
Dan jika Anda pernah membuat makro awesomist, Anda dapat melewati clipboard itu ke _vimrc Anda dengan 'let @x = ""' (meletakkan makro di "") dan simpan selamanya!
Kearns
11

Saya harus mengatakan bahwa salah satu favorit saya adalah meletakkan jendela bantuan di tab baru:

:tab help <help_topic>

Ini membuka bantuan di tab baru dan, sebagai orang yang menyukai tab Vim, ini sangat berguna.

Robert Massaioli
sumber
2
Buffer adalah tab vim. Mereka lebih baik didukung oleh alur kerja vim. Saya menduga tab hanya ditambahkan ke vim karena terlalu banyak orang tidak mengerti buffer.
still_dreaming_1
Ok jadi segera setelah mengatakan itu, saya menemukan penggunaan untuk tab di vim. Memang benar bahwa jika Anda menggunakan satu buffer per tab, Anda perlu belajar tentang buffer. Bukan itu cara tab dimaksudkan untuk digunakan dalam vim. Sebagian besar pengguna vim canggih menggunakan buffer seperti cara tab digunakan di sebagian besar program. Banyak orang berpikir tab seharusnya dinamai tata letak di vim. Mereka sebagian besar karena memiliki koleksi jendela yang berbeda terbuka di tab yang berbeda. Anda juga dapat memiliki buffer spesifik yang Anda buka kembali banyak di satu tab, dan menggunakan tab lain untuk melihat semua buffer lainnya.
still_dreaming_1
9

cw

Ubah kata - menghapus kata di bawah kursor dan menempatkan Anda dalam mode masukkan untuk mengetik yang baru. Tentu saja ini berfungsi dengan tombol gerakan lain, sehingga Anda dapat melakukan hal-hal seperti c $ untuk mengubah ke akhir baris.

karakter f +

Menemukan kemunculan karakter berikutnya pada baris saat ini. Jadi Anda dapat melakukan vft untuk memilih semua teks hingga "t" berikutnya pada baris saat ini. Ini adalah tombol gerakan lain, jadi itu berfungsi dengan perintah lain juga.

Adam Neal
sumber
9

:b [any portion of a buffer name]untuk mengganti buffer. Jadi, jika Anda memiliki dua buffer, "somefile1.txt", dan "someotherfile2.txt", Anda dapat beralih ke yang kedua dengan sederhana ":b 2.t<enter>". Ini juga mendukung penyelesaian tab, meskipun tidak diperlukan.

Berbicara tentang penyelesaian tab, pengaturannya :set wildmode=full wildmenujuga sangat membantu. Ini memungkinkan penyelesaian tab lengkap untuk mode-perintah, serta menu gaya ncurses yang sangat membantu dari semua kemungkinan kecocokan saat menggunakannya.

Michael
sumber
9

:% s, / cari, / ganti,

Anda dapat menggunakan karakter selain /(garis miring) untuk memisahkan pola substitusi. Dengan cara ini Anda tidak perlu melarikan diri dari tebasan jalur file.

hfs
sumber
2
oh sial ya. Saya tahu sedmemiliki ini, tetapi tidak vim. Semakin banyak Anda tahu ♒ ☆
beerbajay