Как открыть почту с помощью vim?

В zsh, zmv делает это легким. Поместить autoload -U zmv в Вашем ~/.zshrc, затем используйте один из нескольких способов указать текст замены для **/*.txt который соответствует файлам расширению txt в текущем каталоге и подкаталогах:

zmv '**/*.txt' '$f:r.eml'
zmv '**/*.txt' '${f%.*}.eml'
zmv '(**/)(*).txt' '$1$2.eml'
zmv -w '**/*.txt' '$1$2.eml'

Если у Вас нет zsh, но у Вас есть удар ≥4 или ksh93, можно использовать ** пересекать подкаталоги рекурсивно и затем цикл по соответствиям. Необходимо будет активироваться ** шаблон шарика сначала с shopt -s globstar в ударе (вставляет его Ваш ~/.bashrc) или set -o globstar в ksh (вставляет его Ваш ~/.kshrc). Это также работает в zsh (никакая предшествующая необходимая установка).

for f in **/*.txt; do mv -- "$f" "${f%.*}.eml"; done

Обратите внимание, что это переименовывает все файлы, не только регулярные файлы. Если у Вас есть каталоги или другие нерегулярные файлы, и Вы хотите оставить их нетронутыми:

zmv -Q '**/*.txt(.)' '$f:r.eml'
for f in **/*.txt; do [[ -f $f ]] && mv -- "$f" "${f%.*}.eml"; done

Без функции оболочки вне POSIX необходимо будет вызвать find пересекать подкаталоги. Ваше решение является хрупким, потому что оно повреждается на файлах, содержащих обратные косые черты, запаздывающий пробел или новые строки. Можно зафиксировать запаздывающий пробел и проблему обратных косых черт с while IFS= read -r f; do … но передавая вывод по каналу find по сути повреждения на новых строках. Использовать -exec вместо этого. На Linux можно использовать rename утилита (какой бы ни Ваше распределение несет). На Debian, Ubuntu и производных:

rename 's/\.txt$/.eml/' **/*.txt
find . -name '*.txt' -type f -exec rename 's/\.txt$/.eml/' {} +

На других дистрибутивах пока ни одни из имен файлов не содержат .txt в середине (потому что rename заменяет первым вхождением исходной строки):

rename .txt .eml **/*.txt
find . -name '*.txt' -type f -exec rename .txt .eml {} +

Только с функциями POSIX повсюду, вызовите оболочку для выполнения преобразования на имени.

find . -name '*.txt' -type f -exec sh -c 'for f; do mv "$f" "${f%.*}.eml"; done' _ {} +

Если Ваш find слишком старо для поддержки -exec … +, необходимо будет вызвать одну оболочку на файл, который делает для более простого но более медленного кода.

find . -name '*.txt' -type f -exec sh -c 'mv "$0" "${0%.*}.eml"; done' {} \;

4
12.09.2016, 04:32
5 ответов

Вы можете передавать почту в vim, по крайней мере, на моей тестовой системе (RHEL 6.7) это работало.

 mail | vim -

команда vim - говорит vim читать из стандартного ввода

вы должны увидеть вывод, который говорит:

Vim: reading from stdin...

в этот момент просто нажмите номер почтового элемента, который вы хотите прочитать, IE 1, чтобы прочитать первое сообщение, затем нажмите ctrl-d, чтобы продвинуть его вперед.

6
27.01.2020, 20:47

Вы можете открыть файл спула почты (обычно / var / spool / mail / ) в vim , но он будет содержать информацию заголовка, которую вы, вероятно, не знаете. хочу. Лучше всего открыть сообщение в почтовой программе, сохранить сообщение в файл, а затем открыть только что сохраненный файл в vim. У вас по-прежнему будет некоторая информация заголовка, но ее гораздо меньше, чем если бы вы открыли файл спула почты напрямую.

4
27.01.2020, 20:47

Надеюсь, я правильно отвечу на ваш вопрос, но вы можете использовать клиент электронной почты Mutt и настроить его для использования Vim.

0
27.01.2020, 20:47

У меня есть следующие строки в моем ~ / .muttrc , так что я могу нажать F6 при просмотре любого сообщение, чтобы перенаправить его в меньше .

macro generic <f6> "|less\n" "view with less"
macro index   <f6> "|less\n" "view with less"
macro attach  <f6> "|less\n" "view with less"
macro pager   <f6> "|less\n" "view with less"

IMO, less - правильный инструмент для этой работы, но если вы настаиваете на vim , то замените все вхождения less выше на vim. -

1
27.01.2020, 20:47

<joost> Do you mean to say that I can read mail with vi too? ;-)

<Joey> Didn't you know that?

<Joey> :r /var/spool/mail/jk

— Seen on #debian-mentors

— Из Linux Fortune(fortune linux)

Вы можете читать почту из Vim с помощью этой команды:

:r /var/spool/mail/{USER}
" replace {USER} with your username on Linux
0
27.01.2020, 20:47

Теги

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