Найти символ под курсором в vim - PullRequest
41 голосов
/ 18 апреля 2011

В vim, как я могу найти следующее вхождение символа под курсором? Я хочу что-то вроде *, но для одного символа вместо слова.

Пример:

H|o|w are you?

идет к:

How are y|o|u?

Причина, по которой я этого хочу, заключается в том, что во всем файле есть странно выглядящий символ (которого я даже не знаю, как набирать текст), и я хочу быстро удалить их все.

Ответы [ 6 ]

71 голосов
/ 18 апреля 2011

Также посмотрите на

г a (показать символ под курсором как ascii)

g 8 (показывать символ под курсором как utf8, включая Unicode, шестнадцатеричные коды и т.д.)

И наиболее полезно:

8 г * тысяча двадцать-одна * 8 * * 1 023

Find an illegal UTF-8 byte sequence at or after the
        cursor.  This works in two situations:
        1. when 'encoding' is any 8-bit encoding
        2. when 'encoding' is "utf-8" and 'fileencoding' is
           any 8-bit encoding
        Thus it can be used when editing a file that was
        supposed to be UTF-8 but was read as if it is an 8-bit
        encoding because it contains illegal bytes.
        Does not wrap around the end of the file.
        Note that when the cursor is on an illegal byte or the
        cursor is halfway a multi-byte character the command
        won't move the cursor.

Обновление

Используйте плагин Тима Папы vim-characterize , чтобы получить полные имена и данные ЮНИКОДА:

В Vim нажатие ga на персонаже показывает его представление в десятичный, восьмеричный и шестнадцатеричный.

Characterize.vim модернизирует это с следующие дополнения:

  • Имена символов Юникода: U + 00A9 СИМВОЛ АВТОРСКОГО ПРАВА
  • Vim орграфы (введите после, чтобы вставить символ): Co, cO
  • Коды Emoji:: авторское право:
  • HTML-сущности: & copy;
32 голосов
/ 18 апреля 2011

В одной строке вы можете использовать fo, а затем ;, чтобы идти вперед (или , назад).

В нескольких строках вы должны использовать /o, а затем n, чтобы идти вперед (или N назад).

В качестве альтернативы, ваша проблема может быть решена с помощью регулярного выражения и замены, то есть :%s/[your odd character]//g

Чтобы скопировать и вставить ваш "нечетный символ", вам нужно перейти к визуальному виду, используя v , чтобы выбрать символ, затем y ESC .

Затем введите: :%s/<CTRL+r>"//g

<CTRL+r>" скопирует содержимое регистра копирования в командной строке.

13 голосов
/ 18 апреля 2011

После будет отображаться <leader>z (обычно \z)

:nnoremap <leader>z xhp/<C-R>-<CR>

Дайте мне знать, если это работает для вас.

2 голосов
/ 18 апреля 2011

Затем просто используйте правило, чтобы заменить их все

:%s/search/replacement/

Это заменяет все вхождения search на replacement.

0 голосов
/ 18 апреля 2011
:exec '%s/'.getline('.')[col('.')-1].'//g'

Если это специальный символ, вам придется добавить обратную косую черту, но, поскольку все специальные символы можно вводить, я полагаю, что это не так.

Редактировать: , чтобы он работалс многобайтовым символом замените getline('.')[col('.')-1] на matchstr(getline('.'), '.', col('.')-1) (см. этот ответ ).

0 голосов
/ 18 апреля 2011

Ну, для одноразового быстрого взлома просто используйте *, он ничего не найдет, кроме вас, чем нажать /, и отредактировать шаблон. К сожалению, работает, только если vim распознает символ как часть слова.

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