VIM Navigasi Super Cepat


91

Satu-satunya hal yang saya rindukan tentang penggunaan editor lain adalah menemukan tempat saya dengan mouse. Saya dapat melihat dengan mata saya ke area tertentu pada file dan dengan gerakan mouse dan klik Saya di sana. Dengan VIM saya harus jjjjjkkkkkkjjjjhhhh ... hampir sampai hhhhh oh sial saya ketinggalan 3 karakter, lll.

Saya sedang belajar melakukan penandaan dan saya menemukan plugin bookmark yang hebat, saya dapat membuat penanda dan menghancurkannya <f3>serta menavigasi ke sana dengan sayangnya tanda tersebut dilupakan ketika file ditutup.

Bagaimana Anda semua melakukan navigasi super file? Saya tahu saya juga bisa melakukan 5j7k4j5h dan seterusnya, tapi harus ada plugin yang bisa membaca mata saya dan meletakkan kursor di tempat yang saya perlukan ..

Saya juga telah belajar menggunakan /% untuk mencari istilah tertentu. Itu memang membantu tetapi semua karakter yang cocok disorot di seluruh dokumen.


Jawaban bagus semuanya, sementara kita masih dalam subjek, saya pikir saya dapat bereksperimen dengan sesuatu seperti nG (lanjutkan ke baris Nomor) f% (temukan karakter pertama dari apa yang saya cari, atau seperti yang disarankan seseorang gunakan w untuk bergerak maju ke kata berikutnya.
Helmut Granda

Jawaban:


173

Coba $ vimtutor, ini akan mengajari Anda semua yang perlu Anda ketahui untuk memulai.

hjkl adalah puncak dari puncak gunung es dan sangat jarang digunakan, setidaknya dalam kasus saya.

wWEedan BbgegEsemua memungkinkan untuk berpindah kata demi kata:

  • wdan emaju, Wserta Epertimbangkan spasi dan tanda baca

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bdan gemundur, Bserta gEpertimbangkan spasi dan tanda baca

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTdigunakan untuk meraih karakter tertentu pada baris saat ini dan ;,digunakan untuk mengulangi gerakan tersebut, dalam arah yang sama ;dan berlawanan arah untuk ,:

  • fmmelompat ke mdepan, maju Fke belakang

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmmelompat SEBELUM mmaju berikutnya , Tmundur

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? digunakan untuk melompat ke kemunculan pertama pola dari posisi kursor saat ini:

  • /pattern maju

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern pergi ke belakang

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ digunakan untuk melompat ke karakter pertama dan terakhir dari baris tersebut.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ digunakan untuk melompat ke karakter baris pertama dan terakhir yang dapat dicetak.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Tunggal dan gabungan ()[]{}digunakan untuk memindahkan frase demi frase atau paragraf demi paragraf atau blok kode demi blok kode.

<C-b>dan <C-f>digunakan untuk menggulir layar maju dan mundur.

<C-u>dan <C-d>digunakan untuk menggulung mundur dan maju setengah layar.

H, Mdan Lgerakkan kursor ke atas, tengah, bawah area pandang, masing-masing.

zt, zzdan zbpindahkan garis di bawah kursor ke atas, tengah, bawah viewport.

Dan seterusnya.

:help motion.txt akan membuatmu terpana.


17
Saya biasanya tidak melakukan ini, tetapi komentar ini hanya untuk memberi tahu Anda bahwa ini adalah jawaban yang bagus!
jojo

Untuk beberapa alasan, saya belum pernah menggunakan H, M, atau L sebelumnya, tips bagus!
Chris

Menambahkan itu ]}dan [{(2 penekanan tombol) lompat ke akhir atau awal ruang lingkup (misalnya yang ditentukan oleh{ ... }
Matthew Woo

3
Nah, ini masih belum benar-benar menjawab pertanyaan OP tentang how to jump to a line he's seeing like using a mouse. Saya tahu dan menggunakan semua binding kunci yang Anda sebutkan sepanjang waktu. Tapi tetap tidak seefisien mengarahkan mouse saat melompat dalam jarak yang jauh.
Penghe Geng

ya H, M, L gampang di rember: Tinggi, Menengah, Rendah;)
@Chris

25

Selain perintah gerak vim, saya menemukan plugin vim bernama EasyMotion cukup berguna untuk dinavigasi, jika Anda terbiasa dengan vimperator atau pentadactyl, EasyMotion hanya mengembalikan mode petunjuk ke vim. berikut adalah demo animasi dan berikut adalah tutorial videonya. Semoga bermanfaat untuk Anda.


Keuntungan dari easymotion adalah Anda dapat pergi ke mana saja di layar hanya dengan 3 penekanan tombol.
Xavier T.

+1: EasyMotion benar-benar merupakan jetpack dari gerakan Vim. (Omong-omong, PreciseJump juga. Sebenarnya, EasyMotion adalah anak dari PreciseJump)
Dmitry Frank

2
Bagaimana penulis EasyMotion mendapatkan baris status yang luar biasa ini di demo?
Cyrille

1
'Garis status super mengagumkan' adalah plugin yang disebut 'Powerline'. Di sini: vim.org/scripts/script.php?script_id=3881
DEzra

bisakah Anda memperbarui url demo animasi? itu tidak berfungsi lagi
brauliobo

20

Ada banyak sekali cara untuk bergerak di dalam vim, ini adalah salah satu area yang sangat kuat. Saya menggunakan {dan }banyak, yang bergerak naik turun ke baris kosong berikutnya ke arah itu. %berguna untuk bolak-balik ke braket yang cocok (apa pun). Wdan Bmaju dan mundur dengan sebuah "kata".

Mungkin bermanfaat untuk meninjau bagian Bergerak di sekitar manual Vim.


4
Mungkin juga layak untuk disebutkan adalah paging up dan down menggunakan Ctl + U dan Ctl + D, masing-masing.
Nick

10

vim memiliki dukungan mouse! coba ini (di .vimrc Anda):

set mouse=a

catatan samping: sebagai pengguna layar, saya telah menemukan bahwa saya juga membutuhkan

set ttymouse=xterm2

agar ini berhasil.


4
Baik untuk diketahui, namun saya masih akan terus mencari navigasi cepat yang sempurna tanpa perlu mouse.
Helmut Granda

9

secara pribadi saya lebih suka menggunakan:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position

5

Dengan opsi relativenumber( : bantuan nomor relativen - disertakan dengan Vim 7.3 ) Anda dapat mencapai garis di bawah mata Anda dengan gerakan a [count]katau [count]j, yang Anda biarkan Anda bergerak dalam garis saat ini dengan gerakan seperti yang ftwebdijelaskan oleh @romainl.


Pilihan bagus. Lebih cepat dari gerakan mudah.
Penghe Geng

5

Terlepas dari {, }, (, ), <number>cb, <number>cB, <number>cWdan %, saya menggunakan teknik navigasi seperti:

  • ciw, diw( ciW, diW). dll. untuk mengedit / menghapus kata dengan cepat di bawah kursor (termasuk karakter non-spasi)
  • ci(, ci"( ca(, ca"), dll. untuk mengedit dengan cepat di dalam tanda kurung, tanda kutip (termasuk tanda kurung, tanda kutip). Hal yang sama berlaku untuk d.
  • Ditandai dengan huruf MODAL untuk mengaturnya secara global (di seluruh file) dan secara persisten (saat buffer ditutup). Misalnya, mAakan membuat tanda global Ayang akan tersedia dengan 'Aperintah (atau`A untuk menghormati kolom).
  • gf untuk membuka file di bawah kursor dengan cepat
  • f, t( F, T) untuk pindah ke karakter, sebelum karakter kanan (kiri) (gunakan ;untuk mengulang). Ini sangat berguna untuk perintah ddan c(gunakan .untuk mengulang).
  • ^]untuk pindah ke tag dan ^Tmundur.

Dan banyak cara lain untuk bergerak :)

Lihat ini untuk informasi lebih lanjut: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Untuk pengguna rails ada plugin rails-vim yang sangat berguna, Anda mungkin ingin memeriksanya juga.


3

ini adalah tempat yang baik untuk mempelajari perintah navigasi utama, beberapa kekuatan / kecepatan vim berasal dari kombinasi gerakan dengan tindakan yaitu cw-> ubah kata, d10j-> hapus 10 baris ke bawah, dll. Juga ini dan ini adalah bacaan yang menarik.


2

Anda dapat :set nohlsearchmematikan sorotan karakter pencarian Anda.

Saya banyak menavigasi menggunakan ctag juga.


github.com/richoH/dotfiles/blob/master/vimrc Anda mungkin menemukan beberapa hal berguna lainnya di sana.
richo

Terima kasih atas tipnya, saya telah memeriksa vimrc Anda dan saya menemukan catatan Anda di mana Anda telah mengatur untuk menyorot baris ketika Anda mencapai 80 karakter saat menulis email atau dokumen. Mengapa Anda menulis email di VIM? Saya dapat memahami dokumen untuk penggunaan pribadi Anda tetapi tidak yakin tentang email.
Helmut Granda

Saya menggunakan mutt + vim untuk membaca dan menulis sebagian besar email saya. Saya juga menggunakan plugin itu semua teks untuk menulis banyak konten web di vim. Saya mengaktifkan pembungkusan kata untuk email, tetapi untuk tautan, dll., Sebaiknya Anda memiliki pengingat jika saya tidak memformat dengan benar, atau jika kutipan bertingkat menjadi terlalu panjang.
richo

0

Saya telah menulis plugin dengan navigasi super cepat, ini disebut tanpa bergerak:

https://github.com/anschnapp/move-less

Ini memungkinkan Anda mencari file lubang dengan nyaman dengan menggulir dengan ( h j k l-keys). Anda tidak mengubah posisi kursor Anda saat menggulir situs lubang (berdasarkan trik lipat). Jika Anda membatalkan pencarian Anda, Anda hanya di tempat Anda memulai.

Untuk navigasi super cepat intinya adalah menggunakan plugin saya untuk mendapatkan posisi target di layar dan kemudian melompat ke posisi yang tepat melalui easymotion (yang sudah direkomendasikan dari jawaban lain):

https://github.com/easymotion/vim-easymotion

Jika Anda menggabungkan keduanya, Anda bahkan dapat mengambil kemajuan dari riwayat lompatan dan Anda dapat beralih antara asal dan tujuan target hanya melalui <c-o>dan <c-i>.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.