Saya memetakan zz
ke 1z=
, yang sebagian besar hebat, tetapi setiap sekarang dan kemudian saran pertama bukan yang benar.
Jadi saya ingin terus mengulangi zz
(atau .
) mengulangi saran lainnya.
Sedetik zz
pada kata yang sama, maka, akan berfungsi seperti u2z=
, sepertiga zz
akan bekerja seperti u3z=
dan seterusnya.
Ada ide tentang bagaimana melakukan itu?
Edit:
Berdasarkan jawaban luar biasa @ nobe4, saya berhasil melakukan apa yang saya inginkan, tetapi saya akan meninggalkannya di sini untuk sementara waktu jika ada yang memiliki perbaikan atau saran:
let s:spell_position = []
let s:spell_count = 0
let s:spell_word = ""
function! LoopSpell()
if s:spell_position != getpos('.') ||
\ (s:spell_count > 0 && s:spell_word !~ expand("<cword>"))
let s:spell_count = 0
let s:spell_position = getpos('.')
endif
if s:spell_count > 0
silent execute "normal! u"
endif
let s:current_word = expand("<cword>")
if len(s:current_word) <= 0
return
endif
let s:spell_suggestions = spellsuggest(expand(s:current_word))
if len(s:spell_suggestions) <= 0
return
endif
if s:spell_count >= len(s:spell_suggestions)
let s:spell_word = s:current_word
let s:spell_count = 0
else
let s:spell_word = s:spell_suggestions[s:spell_count]
let s:spell_count += 1
endif
silent execute "normal! ciw" . s:spell_word
let s:spell_position = getpos('.')
endfunction
nnoremap <c-m> :call LoopSpell()<CR>
(Saya mengubah pemetaan menjadi <c-m>
karena komentar @ Vitor. Juga ini memungkinkan saya untuk menahan kunci-kunci itu dan menyortir saran-saran dengan sangat cepat. Saya memikirkannya sebagai <c-mistake>
.)
:Correct
perintah: Anda akan dapat menavigasi melalui kata-kata untuk memperbaikinyan
danN
, sebuah jendela terbelah terbuka dengan semua saran koreksi yang Anda dapat dengan mudah menavigasi mereka denganj
dank
dan<CR>
akan terapkan koreksi.zz
perintah saya untuk memperbaiki hal-hal tertentu dengan cepat.zz
memusatkan jendela di sekitar garis saat ini. Mungkin salah satu cara pintas yang saya gunakan lebih sering. Anda juga harus checkoutzb
danzt
.scrolloff
cukup tinggi, tapi itu masih berguna, saya akan mempertimbangkan pemetaan lain. Terima kasih!Jawaban:
Inilah yang saya pikirkan:
Putar Ejaan
fitur
'[
dan']
digunakan untuk melacak teks yang sedang dikerjakan. Membuat perubahan di tempat lain secara efektif akan "menerima" perubahan yang disarankan.zp
'<
dan'>
tanda untuk melacak teks.:SpellRotateSubAll
untuk mengganti semua teks yang cocok dengan yang asli dengan saran saat ini.Plugin: spellrotate.vim
sumber
Seperti yang disarankan @statox, Anda dapat menggunakan plugin yang saya tulis: vimcorrect .
Saya pada dasarnya akan menjelaskan cara kerjanya, jadi jika Anda ingin menggunakan kembali sebagian dari itu, Anda bisa.
Untuk fokus pada kata yang salah eja berikutnya saya gunakan langsung
]s
dan[s
ketika mereka melompat ke pertandingan berikutnya / sebelumnya. Saya menetapkan fungsi kecocokan khusus untuk menyorot kata saat ini:Yang menambahkan ke grup yang cocok
error
kata saat ini di baris / kolom saat ini (untuk mencegah beberapa pencocokan pada baris yang sama).The
spellbadword()
fungsi mengembalikan daftar kemungkinan koreksi untuk kata di bawah kursor.Saya cukup menampilkan daftar ini dalam buffer, dan saya memetakan
<CR>
untuk mengganti kata yang salah eja dengan baris saat ini (yaitu kata yang mungkin diperbaiki).Saya juga memetakan
n
danN
ke]s
dan[s
, karena saya terbiasa menekan mereka untuk mencari.q
dipetakan untuk keluar dari plugin, tutup pemisahan dan hapus sorotan.Catatan : ini masih sangat tidak stabil, tetapi saya berencana untuk membuat beberapa perubahan segera. Jika Anda merasa ingin / ingin meningkatkan plugin ini, silakan garpu / buka permintaan tarik.
sumber
zz
perintah saya , jadi saya dapat memperbaiki berbagai hal dengan cepat tanpa memasuki mode khusus. Mungkin kita bisa menambahkannyavimcorrect
jika saya pernah mengetahuinya. :)Berikut adalah fungsi yang harusnya berfungsi:
Ide dasarnya adalah memetakan setiap kata yang diubah ke pasangan baris / kolom (sehingga tidak akan berfungsi hanya untuk satu elemen) dan memeriksa apakah elemen tersebut sudah dimodifikasi.
Untuk melakukan penggantian, cukup banyak yang dilakukan plugin saya:
Saat menggunakan ini, jika Anda ingin kembali ke kata yang salah eja, Anda cukup menekan
u
.The
LoopConfirm
Fungsi ulang kamus, jadi jika Anda mengubah teks Anda, Anda dapat menyebutnya untuk mencegah tabrakan.Beri tahu saya jika Anda mengalami masalah apa pun / jika ada pertanyaan.
sumber
z=
, tetapi saya mungkin bisa menemukan cara untuk menyiasatinya sendiri jika yang lain berhasil. Ini semakin dekat dengan apa yang saya inginkan. Saya akan terus berusaha memperbaikinya. Terima kasih!z=
baik. Tetapi dengan metode ini Anda perlu menyimpan referensi di mana Anda berada. Tetapi jika Anda tidak perlu menyimpan semua referensi secara bersamaan, saya dapat menyederhanakannya :)Selain jawaban yang lain, sebenarnya ada cara yang dibangun tepat di untuk Vim:
<C-x>s
. Ini akan menggunakan menu penyelesaian mode penyisipan Vim.Menekan
<C-x>s
dari mode penyisipan harus memperbaiki kata di bawah kursor ke saran pertama dan menampilkan menu penyelesaian dengan saran lebih lanjut (jika ada). Anda dapat menggunakan'completeopt'
pengaturan untuk menyesuaikan beberapa pengaturan untuk menu penyelesaian.Agak menyebalkan bahwa ini hanya bekerja dari mode insert dan menggunakan menggunakan
<C-x><C-s>
bisa bermasalah (lihat catatan di bawah), sehingga Anda dapat menentukan pemetaan Anda sendiri untuk ini:<C-@>
adalah Kontrol + Spasi.Lihat juga
:help ins-completion
:help i_CTRL-X_s
Saya pribadi menggunakan versi yang lebih canggih yang akan "menebak" jika kita ingin mengeja periksa pekerjaan, atau menggunakan pelengkapan otomatis biasa untuk kode:
Saya percaya ada juga beberapa plugin yang melakukan hal-hal serupa (seperti SuperTab, yang cukup populer), tetapi saya tidak pernah bisa membuat mereka berperilaku seperti yang saya inginkan.
Peringatan : Jika Anda menggunakan Vim dari terminal, maka
<C-s>
akan berarti "hentikan output". Inilah sebabnya mengapa keduanya<C-x><C-s>
dan<C-x>s
dipetakan secara default. Gunakan<C-q>
untuk melanjutkan keluaran jika Anda menekan<C-s>
secara tidak sengaja. Anda juga dapat menonaktifkan<C-s>
jika Anda tidak menggunakannya (lihat pertanyaan ini ). Jika Anda menggunakan GVim, Anda dapat mengabaikannya.sumber