Фильтруйте ТОЛЬКО несколько слов (не всю строку) через внешнюю команду - PullRequest
5 голосов
/ 06 декабря 2011

Я хотел бы использовать внешний Perl или Python сценарий, чтобы изменить выделенный текст в Vim на case title .Как пользователь этих сценариев, вы можете выбирать маленькие слова, которые не пишутся с заглавной буквы.

Однако я хочу применить фильтр только к части строки, а не ко всей строке.Кто-нибудь знает, как это сделать?

Пример строки в исходном коде LaTeX:

\item the title case in latex and ...

Должен стать

\item The Title Case in Latex and ...

Следующая команда не работает:

:{visual}!{filter}

Ответы [ 3 ]

3 голосов
/ 27 апреля 2013

Все команды ex работают аналогично (из-за истории vi / ex).Следовательно, невозможно использовать фильтр только для выбранных слов, только в этом случае.

Это задокументировано в справочном файле vim (версия 8.0.x) под :h 10.3:

Примечание:
При использовании визуального режима для выбора части строки или с помощью CTRL-V для выделения блока текста команды двоеточия *1010* будут по-прежнему применяться ко всем строкам.Это может измениться в будущей версии Vim.

Чтобы перейти непосредственно к этому разделу справки, попробуйте использовать :helpg colon\ commands.*apply.

Для справки: может быть показан список ex-командчерез :h ex-cmd-index.

связанные с sx.questions:

1 голос
/ 07 ноября 2013

Наконец, я нашел плагин для того, что имел в виду:

vis - Расширенные команды визуального режима, замены и поиски vimscript # 1159 ( зеркало github )

:'<,'>B !titlecase

1 голос
/ 06 декабря 2011

Этот пример частично работает, но без заглавной буквы последнего слова в визуально выделенном тексте. Идея состояла в том, чтобы уменьшить нагрузку, оставаясь в Vim. Получите это, чтобы воздействовать на последнее слово в визуальном выборе, и вы там. :) В соответствии с обновленными характеристиками, пройдите "\\ |" разделенный список маленьких слов, с первой буквы в верхнем регистре.

" Visually select some text
":call title_case_selection:()
" and probably want to map it to some abbreviation
"

function title_case_selection:( list_of_words_bar_delimited )
    let g:start_column=virtcol("'<") - 1
    let g:end_column=virtcol("'>") + 1
    let g:substitution_command=':s/\%>'.g:start_column.'v\<\(\w\)\(\w*\)\>\%<'.g:end_column.'v/\u\1\L\2/g'
    call feedkeys ( g:substitution_command )
    call feedkeys ("\<cr>", 't')
    let g:substitution_command=':s/\%>'.g:start_column.'v\<\('.a:list_of_words_bar_delimited.'\)\>\%<'.g:end_column.'v/\L\1/g'
    call feedkeys ( g:substitution_command )
    call feedkeys ("\<cr>", 't')
endfunction

"abba zabba - очень вкусная конфета! <- визуально выберите эту строку </p>

:call title_case_selection:("Is\\|A")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...