Bagaimana cara mencari teks yang dipilih di Vim?

61

Saya sadar bahwa saya dapat menggunakan /diikuti oleh regex untuk mencari sesuatu. Dan saya bisa gunakan ?untuk mencari mundur. Dan saya bisa menggunakan ndan Nmengulangi pencarian maju dan mundur.

Ada juga dua cara pintas yang bagus: *atau #akan mencari kata di bawah kursor (maju / mundur). Itu sangat berguna! (ada juga g*dan g#varian)

Tapi ... Setelah saya memilih teks menggunakan mode visual ( v), bagaimana saya bisa meminta Vim untuk mencari teks itu dengan tepat? Melihat sekilas :helptidak ... huh ... bantu aku.

Denilson Sa Maia
sumber
3
Terkait dengan Pencarian untuk seleksi di Vim .
Rodrigue
Terima kasih atas kiatnya dengan *dan #! Akan menyenangkan jika pertanyaan Anda juga akan menjelaskan apa g*dan g#akan melakukan;)
winklerrr

Jawaban:

22

Urutan berikut akan melakukan apa yang Anda inginkan, mengingat blok teks yang sudah dipilih:

  • y(tarik teks yang dipilih, ke dalam "register secara default)
  • / (masuk ke mode pencarian)
  • ( \ V) (opsional, masuk ke mode "sangat tanpa sihir" *)
  • Ctrl+ r "(masukkan teks dari "register)
  • Enter (Mengikutsertakan!)

(*) mode "very no magic" menafsirkan teks berikut sebagai teks biasa dan bukan sebagai regex. catat bahwa itu \dan /masih istimewa dan harus ditangani dengan cara lain. Jika teks tidak memiliki karakter yang dianggap spesial, Anda dapat melewati langkah ini.

Sumber: Vim Tips Wiki

glennsl
sumber
1
Terima kasih! Ini jauh lebih dimengerti daripada "How-To" pada vim.wikia halaman
winklerrr
64

Anda dapat menarik teks yang disorot terlebih dahulu. Kemudian

  • /

  • Ctrlr

  • "

Yang akan menempel apa yang telah Anda tarik setelah /.

hoge
sumber
7
Ide bagus ... kecuali bahwa teks yang ditempelkan akan ditafsirkan sebagai regex, yang tidak diinginkan. :-(
Denilson Sá Maia
4
Jika ini hampir cukup baik untuk Anda, maka Anda bisa melakukannya /\V<C-r>". Dengan mendahului \Vpermintaan pencarian Anda, Anda memberi tahu vim untuk menggunakan "sangat tanpa sihir". Serangan balik masih dapat menyebabkan masalah. Lihat:help \V
idbrii
3
Mungkin membantu menjelaskan bahwa Ctrl+Ritulah cara Anda mengakses register, dan *hanyalah register clipboard sistem. Misalnya, Anda juga dapat melakukan: yawuntuk menarik kata ke dalam register "(register default), kemudian /<C-r>"untuk mencari string itu.
Ben Davis
5
@ DenilsonSá - Anda dapat menggunakan solusi ini, tetapi alih-alih menggunakan /untuk melakukan pencarian Anda, gunakan ?sebagai gantinya, karena pencarian terbalik akan menghilangkan garis miring secara default. Kemudian Anda dapat menekan Nuntuk melanjutkan pencarian Anda ke arah maju.
Brad Parks
7

Saya tidak pernah merasakan perlunya fitur seperti itu tetapi, mengingat Anda dapat menemukan kebutuhan untuk fitur apa pun di Vim, saya pikir itu akan membantu:

Cari teks yang dipilih secara visual

Saya tidak mengujinya tetapi, melihat kode, tampaknya persis apa yang Anda cari.

slhck
sumber
4

Anda dapat menemukan metode untuk membuat perilaku ini di wiki vim .

akf
sumber
Bagus, saya menemukan versi untuk melarikan diri dari garis miring untuk membantu. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
kerajinan
1

Solusi ini memberdayakan pencarian vim Anda konteks yang dipilih secara visual bahkan dengan multiline dan karakter melarikan diri.

Tambahkan kode berikut di dalam diri Anda .vimrc, dan cari konten yang dipilih secara visual oleh //. Anda juga dapat secara global mengganti konten yang dipilih dengan /s. Atau Gantikan konteks yang dipilih secara lokal //terlebih dahulu, lalu pilih wilayah dan secara visual :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Konfigurasi di atas hanya tentang pencarian. Untuk semua konfigurasi vim saya, silakan kunjungi .vimrc

Charles X.-T. Li
sumber
0

Dalam konfigurasi saya di dua mesin terpisah, jika saya memilih teks dan kemudian tekan /secara otomatis mencari teks yang dipilih.

Nathan Fellman
sumber
Itu bukan perilaku default. Di sini, ketika saya menekan / (saat dalam mode visual), itu hanya menampilkan prompt regex kosong, menunggu saya untuk mengetik sesuatu.
Denilson Sá Maia
Aneh, karena saya tidak pernah melakukan apa pun untuk mengaktifkannya.
Nathan Fellman
3
Banyak distro mengirimkan konfigurasi vim non-standar sebagai default (mungkin karena konfigurasi vim standar menonaktifkan banyak fitur berguna, kebanyakan untuk kompatibilitas vi).
sleske