Я сопоставляются zz
с 1z=
, который является большим большую часть времени, но каждый сейчас и тогда первое предложение не является правильным.
Поэтому я хотел бы повторять zz
(или .
) циклически проходить другие предложения.
Тогда секунда zz
на том же слове будет работать как u2z=
, третья zz
будет работать как u3z=
и так далее.
Есть идеи, как это сделать?
Редактировать:
Основываясь на потрясающем ответе @ nobe4, мне удалось сделать то, что я хочу, но я оставлю это здесь на некоторое время, если у кого-то есть какие-либо улучшения или предложения:
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>
(Я изменил отображение на <c-m>
из-за комментария @ Vitor. Также это позволяет мне удерживать эти клавиши и вроде бы быстро пролистывать предложения. Я думаю об этом как <c-mistake>
.)
:Correct
команду: вы будете иметь возможность перемещаться корытом слова , чтобы правильно сn
иN
расколом открывается окно со всеми предложениями коррекции вы можете просто перемещаться по ним сj
иk
и<CR>
волевым применить коррекцию.zz
команда быстро исправляла определенные вещи.zz
центрирует окно вокруг текущей строки. Вероятно, это один из ярлыков, которые я использую чаще. Вы должны также проверкаzb
иzt
.scrolloff
довольно высокое, но это все еще кажется полезным, я рассмотрю другое отображение. Благодарность!Ответы:
Вот что я придумал:
Заклинание Поворот
Характеристики
'[
И']
метки используются для отслеживания текста , в котором работал над. Внесение изменений в другом месте эффективно «примет» предлагаемое изменение.zp
'<
и'>
отмечает, чтобы отслеживать текст.:SpellRotateSubAll
для замены всего текста, соответствующего оригиналу, с текущим предложением.Плагин: spellrotate.vim
источник
Как предложил @statox, вы можете использовать плагин, который я написал: vimcorrect .
Я объясню в основном, как это работает, поэтому, если вы хотите использовать какую-то его часть, вы можете.
Чтобы сосредоточиться на следующем слове с ошибками, я использую непосредственно
]s
и[s
когда они переходят к следующему / предыдущему совпадению. Я определил пользовательскую функцию соответствия, чтобы выделить текущее слово:Которые добавляют в группу совпадений
error
текущее слово в текущей строке / столбце (чтобы предотвратить многократное сопоставление в одной строке).spellbadword()
Функция возвращает список возможной коррекции для слова под курсором.Я просто отображаю этот список в буфере и сопоставляю
<CR>
слово с ошибкой с текущей строкой (т. Е. С возможным исправленным словом).Я также сопоставляю
n
иN
с]s
и[s
, поскольку я привык нажимать их для поиска.q
отображается, чтобы выйти из плагина, закрыть разделение и удалить выделение.Примечание : это все еще очень нестабильно, но я планирую внести некоторые изменения в ближайшее время. Если вы чувствуете, что можете / хотите улучшить этот плагин, не стесняйтесь раскошелиться / открыть запрос на извлечение.
источник
zz
Тем не менее, я все еще хочу свою команду, чтобы я мог быстро исправить ситуацию, не переходя в специальный режим. Может быть, мы можем добавить это,vimcorrect
если я когда-нибудь это пойму. :)Вот функция, которая должна работать:
Основная идея состоит в том, чтобы сопоставить каждое измененное слово с парой строка / столбец (чтобы оно не работало только для одного элемента) и проверить, был ли элемент уже изменен.
Чтобы сделать замену, это в значительной степени то, что делает мой плагин:
При использовании этого, если вы хотите вернуться к слову с ошибкой, вы можете просто нажать
u
.LoopConfirm
Функция сброса словаря, так что если вы измените текст, вы можете вызвать его для предотвращения столкновений.Дайте мне знать, если у вас возникнут какие-либо проблемы / если у вас есть вопросы.
источник
z=
часть, но я, вероятно, мог бы найти способ обойти это сам, если бы все остальное работало. Это очень близко к тому, что я хочу. Я буду продолжать пытаться это исправить. Благодарность!z=
. Но с этим методом вам нужно сохранить ссылку на то, где вы находитесь. Но если вам не нужно хранить все ссылки одновременно, я могу упростить это :)Помимо других ответов, есть на самом деле путь построен прямо в Vim:
<C-x>s
. Это будет использовать меню завершения режима вставки Vim.Нажатие
<C-x>s
из режима вставки должно исправить слово под курсором до первого предложения и показать меню завершения с дополнительными предложениями (если есть). Вы можете использовать эту'completeopt'
настройку, чтобы настроить некоторые параметры для меню завершения.Немного раздражает, что это работает только из режима вставки, и использование с использованием
<C-x><C-s>
может быть проблематичным (см. Примечание ниже), поэтому вы можете определить собственное отображение для этого:<C-@>
это контроль + пробел.Также см
:help ins-completion
:help i_CTRL-X_s
Я лично использую более продвинутую версию, которая будет «догадываться», если мы хотим либо проверить орфографию работы, либо использовать регулярное автозаполнение для кода:
Я считаю, что есть также некоторые плагины, которые делают примерно одинаковые вещи (например, SuperTab, который довольно популярен), но я никогда не мог заставить их вести себя так, как я хочу.
Предостережение : если вы используете Vim с терминала, это
<C-s>
будет означать «остановка вывода». Вот почему оба<C-x><C-s>
и<C-x>s
отображаются по умолчанию. Используйте<C-q>
для продолжения вывода, если вы нажали<C-s>
случайно. Вы также можете отключить,<C-s>
если вы не используете его (см. Этот вопрос ). Если вы используете GVim, вы можете игнорировать это.источник