Bagaimana saya bisa mendapatkan sumber pilihan vimscript?

11

Jika saya memiliki beberapa baris vimscript yang ingin saya uji sebelum memasukkan vimrc saya, apakah mungkin untuk memilih secara visual, lalu sumber mereka?

saya telah mencoba

  • membuat seleksi visual v, lalu gerakan untuk melakukan seleksi dll, lalu
  • :'<,'>so

Tapi vim memberikan kesalahan

tidak ada rentang yang diizinkan

juga

:'<,'>w | so

memberi

Gunakan! untuk menulis buffer parsial

Bagaimana saya dapat sumber vimscript yang dipilih secara visual?

the_velour_fog
sumber

Jawaban:

11

Pada baris perintah tekan <C-u>lalu ketik @*dan masukkan.

<C-u>akan menghapus rentang visual '<,'>yang telah dimasukkan secara otomatis jika beberapa teks dipilih secara visual.

:@*akan mengeksekusi konten *register yang berisi apa pun yang dipilih secara visual saat ini.

Bahkan jika teks yang dipilih / disorot ada di browser web Anda (firefox, chrome, ...), itu akan berfungsi, *register akan memungkinkan Anda untuk mengaksesnya langsung di vim.


Jika teks Anda dipilih dalam buffer vim, solusi lain adalah dengan menyalinnya dalam register yang bernama, misalnya sebuah register dengan mengetik "ay.

Kemudian, pada baris perintah, ketik: <C-r>adan masukkan.
Ctrl+ rakan memberi Anda semacam prompt yang diwakili oleh karakter "(untuk informasi lebih lanjut baca :h c_Ctrl-r).
Pada prompt baru ini, jika Anda memberi nama register, kontennya akan dimasukkan pada baris perintah, tempat Anda dapat mengeditnya sebelum dieksekusi.


Selain itu jika Anda menyalin beberapa teks tanpa menentukan register, itu akan dapat diakses dari register yang tidak disebutkan namanya " .

Jadi misalkan Anda punya baris vimscript dalam file dan ingin sumber itu dengan cepat, Anda dapat menyalinnya Y, lalu sumberkan pada baris perintah dengan: :<C-r>"dan masukkan.

Akhirnya, jika Anda menggunakan solusi terakhir ini, hanya ada masalah yang harus Anda waspadai.
Jika Anda melihat karakter aneh di baris perintah seperti ini ^M, itu adalah tanda caret dari carriage return. Anda harus menghapusnya, jika tidak, Anda mungkin akan mendapatkan kesalahan.

Singkatnya, Anda:

  1. salin baris vimscript Anda dengan Y
  2. beralih ke mode perintah dengan :
  3. tekan <C-r>untuk masuk ke register register
  4. ketik "untuk memanggil register yang tidak disebutkan namanya
  5. tekan backspace untuk menghapus ^Mkarakter
  6. dan tekan enter.
saginaw
sumber
1
Manis! : D bekerja dengan baik - Saya belum pernah menemukan yang @*sebelumnya, terima kasih!
the_velour_fog
Saya senang itu membantu Anda. Saya telah mengedit jawaban untuk mengusulkan solusi lain.
Saginaw
1
bagus, saya mencoba saran Anda tentang menggunakannya : <C-r>a benar-benar berfungsi dengan baik juga :) Saya kira vim membaca ^M's sebagai baris kembali - dan dieksekusi masing-masing sebagai baris / perintah individu sendiri?
the_velour_fog
Itu pertanyaan yang bagus, jujur ​​saya tidak tahu. Biasanya jika saya tidak menghapus karakter ini saya punya kesalahan. Saya senang itu berhasil untuk Anda tanpa kesalahan. Mungkin seseorang dengan pengetahuan lebih tentang subjek akan menjelaskan kepada kita bagaimana vim memperlakukan karakter khusus semacam itu.
Saginaw
2

Sebenarnya saya melakukannya sedikit berbeda, saya hanya mengedit di vimrc saya dan sumber ulang setiap kali saya menulisnya. (Saya memiliki satu set file vimrc yang bertingkat sehingga ini memungkinkan saya untuk mengubah salah satunya.)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif
dash-tom-bang
sumber
2

Lebih langsung ke pertanyaan daripada jawaban saya yang lain, Anda dapat menentukan pemetaan seperti ini ( nnoremapuntuk tidak ada pilihan, cukup jalankan baris saat ini; vnoremapuntuk saat mode visual aktif):

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

Dalam kedua kasus, "baris saat ini" adalah :executed, jadi dalam versi visual Anda menggunakan :executesatu demi satu baris melalui pemilihan visual.

Seperti yang dinyatakan dalam jawaban lain, <C-u>menghapus rentang spesifikasi yang muncul di baris perintah saat :diketik. The |karakter perlu melarikan diri karena jika tidak mereka ditafsirkan sebagai akhir dari vnoremapperintah.

Ini juga bisa diubah menjadi fungsi untuk menghilangkan beberapa senam pelarian tetapi sepertinya bukan kemenangan besar bagi saya saat ini. Pada dasarnya vnoremap akan diperluas menjadi beberapa baris dan diedit calldengan kisaran atau tidak tergantung pada mode pemetaan [nv].

dash-tom-bang
sumber
Oh, pemetaan mode visual mengeksekusi seluruh baris jadi jika Anda blok-atau karakter-bijaksana akan mengabaikan titik awal dan akhir dalam garis.
dash-tom-bang