Shell vi печать режима (аргумент: повторение): Как удалить его?

Просто предположение, но Вы - вид сравнения яблок к апельсинам относительно какой wc делает по сравнению с какой md5sum делает.

задача md5sum

Когда md5sum обрабатывает файл, он просто открывает файл как поток и затем начинает выполнять поток через функцию контрольной суммы MD5, для которой нужно очень мало памяти. Это по существу ЦП и диск ввод-вывод связывается.

задача туалета

Когда wc выполнения это делает намного более затем просто парсинг файла символ за один раз. Это должно на самом деле проанализировать структуру файла, строк во время, делая определения как, туда, где границы между символами и является ли это границей слова или нет.

Пример

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

“Hello! Greg”
“Hello!Greg”
“Hello\nGreg”
“A.D.D.”
“Wow, how great!”
“wow     \n\n\n    great”
“it was a man-eating shark.”

Для MD5 это тривиально перемещает через эти строки символ за один раз. Для wc это должно решить то, что является словом и границей строки, и отслеживайте количество случаев, которые это видит.

Дополнительные обсуждения туалета

Я нашел эту проблему кодирования с 2006, которая обсуждает реализацию wc в.NET. Трудности довольно очевидны, поскольку Вы смотрите на часть псевдо кода, таким образом, это могло бы помочь начать проливать свет на почему wc кажется, настолько медленнее, чем другие операции.

3
15.04.2014, 23:24
3 ответа

Оскорбительный код находится в: lib / readline / misc.c

Удаление строк 109 и 241 приведет к удалению сообщения.

1
27.01.2020, 21:23

Вы можете переназначить цифровые клавиши для режима vi, чтобы они не запускали повторение arg: N .

Попробуйте вставить следующее в свой ~ / .bashrc (или вы можете сначала протестировать его в активном терминале):

bind -m vi 3:self-insert

Затем попробуйте нажать Escape и ввести 3 . Вы должны напечатать цифру 3. Однако это, вероятно, не очень хорошее поведение, поскольку вы, вероятно, не хотите, чтобы номер печатался, когда вы не в режиме вставки. Чтобы полностью отключить цифровые клавиши, когда они не находятся в режиме вставки, просто выполните следующие действия для всех чисел:

bind -m vi N:

(для N = {0..9}).

В вашем ~ /.bashrc , вы можете добавить:

for N in {0..9};
do
    bind -m vi $N:
done
0
27.01.2020, 21:23

Когда вы находитесь в командном режиме в vi (фактический редактор или режим Bash), нажатие цифр вводит аргумент (отсюда «arg»), который обычно используется для установки количества повторений. для выполнения следующей команды. Чтобы этого избежать, вы должны перейти в режим ввода (например, нажав i ) перед тем, как нажимать цифры.

Демонстрация:

Если вы не находитесь в режиме vi, вы можете войти в него, используя:

set -o vi

(Вы можете выйти из режима vi, войдя в режим emacs: set -o emacs )

Теперь, в режиме ввода vi введите такую ​​команду:

echo abcdefghijk4

Вы заметите, что в конце вы получите цифру «4», как показано выше.

Теперь нажмите Esc . Курсор переместится на один символ влево, и вы перейдете в командный режим.

Нажмите цифру, скажем «3». Теперь вы увидите это:

(arg: 3) echo abcdefghijk4

Теперь нажмите заглавную X. Вы должны увидеть:

echo abcdefgh4

Три символа («ijk») были удалены, потому что вы указали Readline (редактор ввода командной строки Bash) «стирать» 3 символа .

Теперь нажмите i и любую цифру. Цифра была вставлена ​​в командную строку в том месте, где находился курсор.

2
27.01.2020, 21:23

Теги

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