Как к grep на исходном коде, не ловя комментарии

Как Michael предполагает, менеджер окон не ответственен за управление методом ввода. Сначала необходимо будет выбрать метод ввода, который IBus, SCIM и uim кажись, быть самыми популярными.

Затем, необходимо удостовериться, что это запускается когда X запускается. Вы упомянули использование легкого WM поэтому Вы, вероятно, захотите добавить его к X init файлам, такой как ~/.xinitrc:

export GTK_IM_MODULE=scim
export XMODIFIERS=@im=SCIM
export QT_IM_MODULE=scim
scim -d

В зависимости от метода ввода Вы выбираете, метод для переключения языков будет отличаться. Как правило, Вы должны будете export LANG, такой как

export LANG=ja_JA.UTF-8

... но иногда щелчок правой кнопкой по полю ввода и выбор "Input Methods" могут быть достаточными.

10
23.05.2017, 14:33
3 ответа

Можно попробовать наивный подход для соответствия некомментариям как это:

 $ egrep -v "^(//|/\*| \*)" sourcecode

Это будет только обратное соответствие против снабженных префиксом комментариев - который является строками, запускающимися с также //, /*, * или */ - и следовательно это не не учтет блоки, которые комментируются с /* и */ пара.

10
27.01.2020, 20:00

grep работает над чистым текстом и ничего не знает о базовом синтаксисе Вашей программы C. Поэтому в порядке не поиск в комментирует, что у Вас есть несколько опций:

  1. C-комментарии полосы перед поиском, можно сделать это использование gcc -fpreprocessed -dD -E yourfile.c Для получения дополнительной информации см. https://stackoverflow.com/questions/2394017/remove-comments-from-c-c-code

  2. Пишите/используйте некоторый hacky, который полурабочие сценарии как Вы уже нашли (например, они работают путем пропуска строк, запускающихся с // или /*) для обработки деталей всех возможных комментариев C/C++ (снова, см. предыдущую ссылку для некоторых страшных тестовых сценариев). Затем у Вас все еще могут быть ложные положительные стороны, но Вы ничего не должны предварительно обрабатывать.

  3. Использование более усовершенствованные инструменты для того, чтобы сделать "семантический поиск" в коде. Я нашел "coccigrep": http://home.regit.org/software/coccigrep/, который Этот вид инструментов позволяет поиску некоторых определенных операторов языка (т.е. обновление структуры с именем) и конечно они отбрасывают комментарии.

11
27.01.2020, 20:00

Вот особый вариант для всех остальных из нас, -пришедших к этому вопросу поздно:

ls -1 src/*.c | xargs -i sh -c "echo;gcc -fpreprocessed -dD -E {} 2>&1 | grep -wi -e one -e two -e three -n | sed 's:^:{}\::'" | cat -s

Список исходных файлов C

ls -1 src/*.c

передаются в xargs, который выполняет препроцессор в дочерней оболочке

gcc -fpreprocessed -dD -E {} 2>&1

, который впоследствии передается в нужную команду grep

grep -wi -e one -e two -e three -n

который затем передается в sed для префикса каждой строки с текущим именем файла

sed 's:^:{}\::'

Наконец,все повторяющиеся пустые строки сворачиваются в отдельные строки с помощью cat:

cat -s

Это работает в системе RHEL6, но я предполагаю, что это достаточно общее для других *nix-систем.

1
27.01.2020, 20:00

Теги

Похожие вопросы