dr_magnus 04.10.2011 23:32
Tips & tricks — Перевод manpages с помощью vim и StarDict
Всем привет.Что-то давненько я ничего не писал, хотя материала накопилось уже довольно много - ощущается нехватка времени.
В этой статье я расскажу как настроил перевод отдельных слов при чтении man-страниц.
Всем нам время от времени приходится курить маны, и, не смотря на все наши англоязычные познания, мы иногда забываем перевод того или иного слова.
Для себя эту проблему я решил следующим образом.
- Pager:Есть такая чудная вещь, как vimpager - скрипт к vim'у, который может выступать в качестве стандартного пэйджера вместо less.
- Переводчик:Будем использовать консольную версию StarDict - sdcv, которая замечательным образом умеет пользовать скрипты.
- Набор словарей для StarDict'а:Можно использовать любые словари, которые совместимы с StarDict, в зависимости от потребностей.
- Чудесный скрипт, который поможет нам все вышеуказанное связать воедино.
Приступим.
- Пэйджер.Установите vimpager любым способом, доступным для вашего дистра и добавьте в .bashrc следующую строку для использования его по умолчанию:
1
- SDCV и словари к нему.SDCV, опять же, устанавливается как вашей душе угодно, а словари к нему можно взять на вышеуказанном сайте. Словари можно сделать общесистемными (/usr/share/stardict/dic) или личными ($HOME/.stardict/dic).
- Скрипт объединения.Добавив эти строки в .vimrc, мы можем, при подведении курсора к интересующему нас слову, нажать F3 и получить его перевод.
Рекомендую: обратить внимание на 'sdcv -u', с помощью которого можно определить используемый словарь
Рекомендую: обратить внимание на vim-команды отображения текста:
:set wrap
:set linebreak
и др. Они помогут более читабельно отобразить переводимый текст.
Скрин:
На терминале "man mutt". В качестве переводимого слова выбрано "configuration".
З.Ы.
Всё вышесказанное собрано на просторах интернета и не претендует на оригинальность, а только показано с целью продемонстрировать гибкость инструментов Линукса.
mironov_orig 05.10.2011 00:09 #
+ 2 -
кастую скриншот
сделал. вот там, где начинается русский текст, там начинает работать переводчик.
в качестве словаря выбран "Английский Компьютерный" (en-ru-comp).
отображение переводимого текста реализовано через ж..пу. нужно, наверное, поэкспериментировать с VIM. если кто-нить может что-нить подсказать - буду признателен.
отображение переводимого текста реализовано через ж..пу. нужно, наверное, поэкспериментировать с VIM. если кто-нить может что-нить подсказать - буду признателен.
А чем тебя не устраивает expand('')? Просто
let res = expand('')
и выкинь всю часть функции до этой строчки нафиг.
let res = expand('')
и выкинь всю часть функции до этой строчки нафиг.
Парсер-лох. expand('[cword]'), квадратные скобки заменить на угловые.
Вот полная функция, которую юзаю я для тех же целей:
По нажатию на Leader-t (при установках по-умолчанию это "\t") открывает окно с переводом слова под курсором.
По нажатию на Leader-t (при установках по-умолчанию это "\t") открывает окно с переводом слова под курсором.
у меня возникла пара вопросов:
1. При использовании твоей функции у меня выбивает ошибку "E21: Изменения невозможны, т.к. отключена опция modifiable: silent put =word". В .vimrc я прописал set modifiable, но это не помогло. Поделись, плз, секретом - ЧЯДНТ.
2. Т.к. я новичек в VIM, может прокоментируешь код, что бы таким как я было легче изучить этот редактор?
Спасибо.
1. При использовании твоей функции у меня выбивает ошибку "E21: Изменения невозможны, т.к. отключена опция modifiable: silent put =word". В .vimrc я прописал set modifiable, но это не помогло. Поделись, плз, секретом - ЧЯДНТ.
2. Т.к. я новичек в VIM, может прокоментируешь код, что бы таким как я было легче изучить этот редактор?
Спасибо.
Вот, расписал как ты просил. Почему у тебя не работает... Ты скорее всего запускаешь вим в режиме только для чтения? (это vimpager тот же организует).
Этот плагин я пользую с обычным вимом, просто читаю книжки когда, навожу курсор на непонятное слово и жму \t, получаю перевод в новом окне над текущим.
Специально для тебя я указал нужный параметр silent setl modifiable (см. комментарий). Дело в том, что параметр modifiable является сугубо локальным для данного конкретного буфера, когда ты в .vimrc делаешь set modifiable ты устанавливаешь право на модификацию текущего буфера, потом плагин открывает новое окно с новым буфером, а там этот параметр установлен по-умолчанию для твоего варианта запуска вима, то есть nomodifiable.
Этот плагин я пользую с обычным вимом, просто читаю книжки когда, навожу курсор на непонятное слово и жму \t, получаю перевод в новом окне над текущим.
Специально для тебя я указал нужный параметр silent setl modifiable (см. комментарий). Дело в том, что параметр modifiable является сугубо локальным для данного конкретного буфера, когда ты в .vimrc делаешь set modifiable ты устанавливаешь право на модификацию текущего буфера, потом плагин открывает новое окно с новым буфером, а там этот параметр установлен по-умолчанию для твоего варианта запуска вима, то есть nomodifiable.
Ах да, установка. Лучше всего кинуть в ~/.vim/plugin/translate.vim.
Если хочешь это прописать прямо в ~/.vimrc (что не рекомендуется), то убедись, что закомментил первые три строки с проверкой на существование sdcv и выходом из скрипта, потому что если у тебя sdcv не окажется, то не только не создадутся эти все функции и обвязки, но не будет выполнена часть скрипта ~/.vimrc после тела этого плагина.
Если хочешь это прописать прямо в ~/.vimrc (что не рекомендуется), то убедись, что закомментил первые три строки с проверкой на существование sdcv и выходом из скрипта, потому что если у тебя sdcv не окажется, то не только не создадутся эти все функции и обвязки, но не будет выполнена часть скрипта ~/.vimrc после тела этого плагина.
ОФИГЕННО! Большое спасибо! Всё заработало!
но опять же - вопросы:
- расскажи, если не сложно, про silent - встроенную справку я читал, но не очень понял :-(
- если можешь, то расскажи, плз, про методы вывода текста из VIM - можно ли как-нить отформатировать вывод sdcv? в этом выводе явно проглядываются какие-то тэги форматирования, но вот как их использовать не совсем понятно.
но опять же - вопросы:
- расскажи, если не сложно, про silent - встроенную справку я читал, но не очень понял :-(
- если можешь, то расскажи, плз, про методы вывода текста из VIM - можно ли как-нить отформатировать вывод sdcv? в этом выводе явно проглядываются какие-то тэги форматирования, но вот как их использовать не совсем понятно.
silent — это команда-глушилка, как раз для скриптов. Дело в том, что при нормальном выполнении команды могут иногда что-то писать на выход, например "echo 123" выведет тебе "123". В скриптах это иногда не нужно, и тогда используется silent как префикс к команде. Можешь попробовать в самом виме ввести "echo 123", а потом "silent echo 123". В первом случае ты увидишь 123 в командной строке как результат вывода echo, во втором этого не произойдёт. В принципе команда "set" ничего не пишет, так что в моём случае это просто перестраховка, но вот та же команда "file" выведет новое имя файла в буфере и краткую инфу по нему, и этот вывод глушится через silent. При этом в случае, если команда будет плеваться ошибками, silent их глушить не будет, для этого нужно делать "silent!", тогда даже сообщения об ошибках ты не увидишь.
Отформатировать можно трёмя способами. Первый — через описание синтаксиса. Вот какой использую я для переводов (~/.vim/syntax/sdviv.vim):
Второй — обычными командами редактирования вима, типа "d", "s///" и т.д. Или через скриптинг до вставки через put =word, манипулированием переменной word в данном случае (ну теми же strpart(), substitute() и прочими).
Третий через команды-фильтры на уровне шелла, например system('sdcv -n ' . a:word . ' | sed "s/a/b/g"'), ну или чем-то подобным, либо фильтрвать уже в виме через команды вроде ":.!sed s/a/b/g", что удобнее.
Естественно это всё можно комбинировать как угодно, например откорректировать вывод после вставки в окно, а потом применить синтаксическую расцветку.
Отформатировать можно трёмя способами. Первый — через описание синтаксиса. Вот какой использую я для переводов (~/.vim/syntax/sdviv.vim):
Второй — обычными командами редактирования вима, типа "d", "s///" и т.д. Или через скриптинг до вставки через put =word, манипулированием переменной word в данном случае (ну теми же strpart(), substitute() и прочими).
Третий через команды-фильтры на уровне шелла, например system('sdcv -n ' . a:word . ' | sed "s/a/b/g"'), ну или чем-то подобным, либо фильтрвать уже в виме через команды вроде ":.!sed s/a/b/g", что удобнее.
Естественно это всё можно комбинировать как угодно, например откорректировать вывод после вставки в окно, а потом применить синтаксическую расцветку.
Да, в 7.3 появилась возможность через синтаксические правила указывать «скрытые» символы и строки, которые раньше «скрывались» через установку цвета символов равным цвету фона, теперь их можно честно спятать, так что эти символы даже видны юзеру не будут, так можно скрывать синтаксические маркеры, которые нужно только для определения расцветки текста (например теги в HTML).
Подробнее см. help conceal, help 'conceallevel' и help 'concealcursor'.
Подробнее см. help conceal, help 'conceallevel' и help 'concealcursor'.
Другими словами silent command это аналог command > /dev/null в шеле, а silent! command — это command > /dev/null 2> /dev/null.
И таким образом, лёгким мановением руки, пост-ссылка (ибо весь пост содержится по одной из ссылок в статье) превращается в лекцию-пересказ хелпа вима c комментариями от kstep ☺