воскресенье, 28 февраля 2010 г.

Установка Mplayer в Linux и Mplayer кодеки

http://mydebianblog.blogspot.com/2006/09/mplayer.html

Установка Mplayer в Linux и Mplayer кодеки

Задача: собрать Mplayer в Linux на примере Debian Linux и установить кодеки для Mplayer.
Решение: по ряду причин этот плеер не включён в основную ветку дистрибутива, но имеется отдельно в исходниках. Для этого потребуется скачать собственно исходники плеера и все его кодеки с официального сайта.

Подготовка
Идём на официальный сайт и скачиваем там архив с программой и, кроме того, архивы с кодеками (они обычно называются essential*.tar.bz2 или вроде того). После скачивания всего добра оттуда готовим систему для установки: нужен компилятор и несколько дополнительных пакетов.
Для сборки плеера из исходников нам нужно поставить пакеты:
# apt-get install gcc g++ make
После этого ставим необходимые для MPlayer пакеты:
# apt-get install libogg0 libogg-dev libvorbis0a libvorbis-dev vorbis-tools libpng12-0 libpng10-dev liblogfile-rotate-perl libconfhelper-perl debhelper fakeroot libgtk1.2 libgtk1.2-dev svgalibg1 svgalibg1-dev libsdl1.2-dev
Некоторые пакеты могут быть уже установлены, другие потребуют обновлённых версий, но набор их остаётся прежним. Далее переходим в каталог /usr/src и создаём там каталог mplayer, где и будем его собирать. Всё почти готово...


Сборка MPlayer в Debian Linux - консольный плеер
Часто все эти графические свистелки только отнимают время и затрудняют работу с плеером. Кроме того, запомнить пару ключей проще, чем тыкаться в бесконечных выпадающих менюшках а-ля-Xine. Ниже описывается процедура сборки консольной версии MPlayer, в следующей секции даются рекомендации по сборке его с GUI.
Итак, переходим в каталог с исходниками MPlayer и разархивируем их в каталог:
#cd /usr/src/mplayer/ && tar -jxvvf * && cd *
После этого в этом же каталоге набираем:
# ./configure
Поползуют выводы конфигуратора: что у вас есть и с поддержкой чего будет компилироваться MPlayer. Если его на этом этапе что-то не устроит - он вылетит и перед кончиной скажет, чего ему не хватило для полного счастья. Недостающее надо поставить, после чего собрать-таки пакет прописыванием следующего заклинания:
# DEB_BUILD_OPTIONS="--disable-runtime-cpudetection" fakeroot debian/rules binary
Вот прямо так и пишите, как здесь, и должно быть вам счастье. По экрану поползут и замелькают строчки компилятора, в которые вчитываться не обязательно. Апофеозом его деятельности будет появившийся в каталоге /usr/src/mplayer заветный файлик mplayerVersion.deb, который мы ставим утилитой dpkg следующим манером:
# dpkg -i mplayerVersion.deb
Но это ещё не всё: у нас только основные кодеки, а дополнительных нет, и разные неправильные ролики мы не увидим. А хотим. Но разве напрасно мы качали кодеки к MPlayer вида all-*.tar.bz2 и essential-*.tar.bz2? Сейчас мы их поставим.


Установка Mplayer кодеков в Linux

Отвечаю на вечный вопрос убунтуйцев и сусеводов - как поставить кодеки Mplayer. Скачиваем архив с кодеками Mplayer, разархивируем кодеки Mplayer и все их сваливаем в каталог /usr/lib/win32 - если такого каталога нет, создаём его.
Теперь (заделываясь рутом или его полномочиями через sudo) идём в каталог /etc и редактируем там файл ld.so.conf вписыванием в него строк:
/usr/lib
/usr/lib/win32
Вот как например этот файл выглядит у меня (это только пример!)
# cat /etc/ld.so.conf

/usr/X11R6/lib
/usr/lib/atlas
/usr/lib
/usr/lib/win32

Вот только после этого действа у меня появились кодеки - и увидел их не только MPlayer, но и Xine, что приятно вдвойне. Так что теперь кодеками Mplayer будут пользоваться оба плеера.

Использование консольного MPlayer - основные команды
Сейчас вы освоите такую экзотику, как консольный плеер. Это просто и при некотором навыке гораздо быстрее графического. Организую это в виде FAQ:

1. Как посмотреть фильм, который находится в каталоге /home/vasya/porno.avi? В графической консольке (Терминал, xterm или как она у вас называется) набираем: mplayer /home/vasya/porno.avi

2. Фильм идёт, но много жрёт процессорного времени (вариант: только в центральной части экрана, а когда разворачиваешь fullscreen - фильм продолжает идти не на весь экран) - что можно сделать?
Попробовать другие методы видеовывода, указав плееру параметр:mplayer -vo xv /home/vasya/porno.avi И попробовать другие ключи:
-vo sdl
-vo xv
-vo x11
-vo gl
-vo gl2
а так же другие, которыми плеер поделится, если его попросить: mplayer -vo help

3. Фильм идёт рывками, пропуск кадров виден нетрезвым/невооружённым глазом, что делать?а) попробовать предыдущий рецепт (п.2) и поменять параметр видеовывода, особенно помогает sdl;
б) указать параметр -framedrop или -hardframedrop при которых плеер пытается воспроизводить фильм в максимально пристойном качестве с пропуском кадров;
в) подымать framebuffer, выгружать иксы и смотреть фильмы в чистой консоли (для упёртых фанатов) или
г) обновить своё железо.

4. Хочется выводить фильм на второй монитор (который в режиме clone/dualhead), а оно играет только на одном мониторе - куда копать?В тот же пункт.2 и менять видеовывод указанием параметра видеовывода. Рецептов тут дать нельзя - только перебором возможных вариантов. Например, для ЗлаХП и видеокарты ATi RadeonX300 одновременный вывод на двух мониторах наблюдался при указании:
mplayer -vo gl
/home/vasya/porno.avi
Вывод фильма был, а ЗлоМедиаПлеер нервно курил в сторонке :-)
5. Хочу подкрутить яркость/контраст/насыщенность, а на какие кнопки жать в консольном плеере?На клавиатурные, натурально, о чём, кстати, в man mplayer подробно растолковано. Но для тех, кто мануалов не читает, привожу перевод:
Кнопки 1 и 2 понижают/повышают контраст
Кнопки 3 и 4 понижают/повышают яркость
Кнопки 5 и 6 понижают/повышают оттенки
Кнопки 7 и 8 понижают/повышают насыщенность
Не все эти операции поддерживаются различными методами видеовывода.

6. На какие кнопки жать, чтобы перемещаться по фильму?На клавиатуре давим:
стрелка < и > передвинуться назад/вперёд на 10 секунд
кнопка перемещения курсора вверх и вниз передвинуться назад/вперёд на 1 минуту
кнопка страница вверх и страница вниз передвинуться назад/вперёд на 10 минут
и читаем-таки маны (man mplayer), в которых это пишут буквально сразу, не откладывая в дальний ящик.

7. Видео и звук рассинхронизируются - как компенсировать?Снова мучаем клавиатуру:
кнопка + и - компенсировать назад/вперёд десинхронизацию на 0.1 секунд
или прописать параметр -autosync 0

8. У видеофайла неправильное соотношение сторон (не правильный aspect ratio) - как компенсировать?В консоли запускаем mplayer c параметром -monitoraspect X:Y где вместо X и Y подбираем правильные соотношения экспериментально. Полная строка может выглядеть так: mplayer -monitoraspect 4:4 1984.mpg

Этого должно хватить для более или менее продвинутого использования замечательного плеера MPlayer.


Ссылки:
Лучшая статья по установке MPlayer в Debian, как и все другие толковые руководства по данному вопросу на англицком наречии. Много полезной информации о том, как поставить MPlayer в с графической мордой сказано здесь. Установившим Fedora Core - сюда, убунтуйцев ждут здесь.

суббота, 27 февраля 2010 г.

GMate — набор полезных расширений для gedit

image

Редактором по умолчанию в GNOME и, следовательно, Ubuntu является gedit. И в отличии от Блокнота в Windows он полезен :), однако выглядит он всё таки очень простым, даже после установки пакета gedit-plugins. Но на самом деле это довольно милый и хорошо расширяемый редактор, нужно просто добавить воды расширений.

GMate смотрит в сторону прекрасного TextMate из Mac OS X и содержит в себе подборку самых вкусных расширений, сниппетов, тем. Изначально, GMate создавался именно для Ruby-разработчиков, но пригодиться и для других разработчиков.

Если Вы любите GNOME и Ruby, то просто обязаны его поставить :).

Установка


Ubuntu Karmic

Нужно добавить Ubuntu on Rails PPA в репозитории: ppa:ubuntu-on-rails/ppa
Система → Администрирование → Источники приложений, вкладка Другое ПО, кнопка Добавить

И установить пакет gedit-gmate:
sudo apt-get install gedit-gmate
Другие Linux

Смотрите репозиторий пакета.

Что внутри


Поддержка языков: Markdown, HAML, YAML, Groovy, SASS, Cucumber, язык шаблонов Ruby и Django.

Множество красивых тем (большинство пересозданы с TextMate).

Множество сниппетов для: Ruby on Rails, Ruby, jQuery, Сucumber и других.

И конечно же множество расширений:
  • Резкое открытие — Открывает файлы по регулярному выражению
  • Инструменты для текста — Дополнительные инструменты для работы с текстом
  • Поиск в файлах — Поиск по файлам из корня обозревателя файлов.
  • Расширенные закладки — Инструмент для расширенных закладок
  • Выравнивание — Выравнивание блоков текста в колонки
  • Обозреватель классов — Обозреватель классов для gedit
  • Переключение по Tab’у — Позволяет переключатся между файлами по Ctrl+Tab
  • Умные отступы — Модуль умных отступов для gedit
  • Загрузчик rails-файлов — Проверяет, является ли файл частью rails-проекта и устанавливает язык RubyOnRails
  • Переход к файлу — Удобное открытие и переключение между файлами.
  • Близнецы — Умное завершение парных символов. ({["''"]})
  • Поиск и замена по регулярным выражениям — Поиск и замена текста с помощью регулярных выражений.
  • Горячие команды для Rails — Запускайте команды Rails (или терминала)!
  • Открытие файлов в gedit — Открывает файлы по условиям поиска
  • Горячие клавиши для Rails — Нажмите Ctrl+Shift+R для rails-вызовов
  • Список дел — Порт бандла TODO List из Textmate для gedit
  • Сохранение без хвостовых пробелов — Автоматически удаляет хвостовые пробелы (trailing spaces) перед сохранением
  • Завершение слов — Завершает слова по Enter’у
  • Вытаскиватель Rails partial’ов — Вытаскивает выделенный текст в Rails partial
  • Режим быстрой подсветки — Нажмите Ctrl+Shift+H для быстрой подсветки выделенного текста

Настройка ПК для просмотра High Definition фильмов (1080p / 1080i / 720p)

Настройка ПК для просмотра High Definition фильмов (1080p / 1080i / 720p)
http://www.hdtv.net.ua/nastroika_new.html

четверг, 25 февраля 2010 г.

Установка переменной PATH

http://itil.in.ua/index.php/known-errors/28-work-in-nix/62--path 
admin@linux:~> PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/sbin:
/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:
/usr/lib/java/bin

admin@linux:~> export PATH
admin@linux:~> echo $PATH

или, если надо добавить каталог

admin@linux:~> PATH=$PATH:newpath
admin@linux:~> export PATH

чтобы постоянно не набирать поместить в .profile строку

export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin  Требуется перезагрузка сессии пользователя

Vim Ruby Debugger

http://habrahabr.ru/blogs/ruby/59731/
До недавнего времени я писал Ruby код в Netbeans. Штука клевая и очень удобная, но я давно заглядывался на Vim, уж больно он мощный текстовый редактор, бобам и не снилось. Пытался несколько раз на него перейти, но как только встречался какой-то затык в коде, закрывал Vim, открывал Netbeans, ставил брейкпоинт и начинал разбираться что не так. В общем, привык я к отладчику.

Помучившись некоторое время, пришла идея написать Ruby дебаггер под Vim. Открыл код rails.vim, NERDTree.vim и начал учиться Vimscript'у. Так что спасибо tpope и Marty Grenfell за уроки (хотя наверно они никогда этого не прочтут и не узнают об этом). Плагин можно сейчас лицезреть на гитхабе.


Что умеет плагин


1. Дебажить любые Ruby скрипты, используя ruby-debug-ide гем.
2. Ставить/удалять брейкпоинты, смотреть переменные, путешествовать по коду.
3. Вводить команды вручную. Например, :RdbCommand p Post.all выведет все записи модели Post.

Что потребуется


Для корректной работы плагину надо:
  1. Vim версии >= 7.0, скомпиленный с опциями +signs и +clientserver. Проверить это можно так:

    :echo has("signs") && has("clientserver") && v:version >= 700

    Результат должен быть = 1
  2. Установленный гем ruby-debug-ide
  3. Если вы под Linux'ом, нужен установленный lsof

Установка

  1. Клонируем репо:

    git clone git://github.com/astashov/vim-ruby-debugger.git

  2. Из полученного нам нужна только папка vim, остальное нужно только для разработки. Копируем содержимое vim в ~/.vim/ (или в vimfiles, если вы под Windows).

    В итоге, должно получиться 3 файла:
    • plugin/ruby_debugger.vim — собственно сам плагин
    • doc/ruby_debugger — документация
    • bin/ruby_debugger.rb — промежуточный Ruby скрипт между Vim'ом и ruby-debug-ide гемом. Всё общение между ними происходит через него.

  3. Далее, запускаем Vim и выполяем

    :helptags ~/.vim/doc

    для установки документации по плагину. Почитать её можно по команде

    :help ruby-debugger

Установка завершена!

Использование

  1. Запускаем Vim. Если вы используете gvim, он автоматически запустит Vim сервер, а если vim — надо запускать с опцией servername: vim --servername VIM
  2. Идем, например, в какой-нибудь рельсовый проект.
  3. Запускаем сервер c отладчиком командой

    :Rdebugger

    (по умолчанию он запускает script/server webrick, если надо отладить другой скрипт, можно запустить:

    :Rdebugger foo.rb

  4. Ставим где-нибудь брейкпоинт (по умолчанию командой b, чаще всего это \b).
  5. Открываем страницу с брейкпоинтом в браузере. Vim должен автоматически прыгнуть к линии со сработавшим брейкпоинтом.
  6. Дальше смотрим переменные, путешествуем по коду, в общем — развлекаемся! :)

Команды


По умолчанию (их конечно же можно переопределить в вашем .vimrc) задейстованы такие сокращения:
  • b — поставить брейкпоинт
  • v — открыть/закрыть окно с переменными. Переменные можно открывать/закрывать либо командой 'o' в нормальном режими или левым дабл-кликом
  • m — открыть/закрыть окно с брейкпоинтами. Можно прыгнуть на выбранный брейкпоинт команодй 'o' в нормальном режими или левым дабл-кликом, а также удалить брейкпоинт командой 'd' в нормальном режиме
  • n — перешагнуть (step over)
  • s — войти (step into)
  • c — продолжить (continue)

Как переопределить их вы можете почитать в :help ruby-debugger-details

Если вы встретили баг или придумали новую клевую фичу


То я буду дико признателен за репорт в гитхабовском Issues. Можете также просто написать на anton /сбк/ astashov.net, но репорт в Issues будет лучше. :) Плагин ведет лог почти обо всех своих действиях в файл ~/.vim/tmp/ruby_debugger_log, так что вместе с багом желательно приложить содержимое этого файла.

Я проверял работоспособность в Linux'е и Windows. В Linux'e плагин работает лучше, в Windows я так и не понял как запускать процессы в бэкграунде, поэтому мельтешащие окна с сервером и промежуточным ruby скриптом отвлекают. В MacOs не проверял, потому как у меня её нет.

Graphical Cheat Sheet

http://habrahabr.ru/blogs/vim/28200/
Ну, раз уж пошла такая пьянка, то внесу и я свои пять копеек. Этот графический чит-шит помогает мне и сейчас.

Картинка кликабельна. Можно распечатывать и вешать на стену :)

По ссылке вы можете найти уроки по vi/vim, основанные на подобном графическом предствалении.

Вообще, в своё время, много замечательных советов по vim нашёл здесь.

Ёмкий список команд для VIM на русском

http://freesource.info/wiki/Stat%27i/KratkoOboVsjom/VIM

Оглавление документа
1 Опции командной строки
2 VIM-файлы
3 Структура команд
4 Команды
4.1 Перемещение по тексту
4.2 Прокрутка экрана
4.3 Смена режимов
4.4 Работа с файлами
4.5 Редактирование
4.6 Поиск
4.7 Манипуляции с окнами
4.8 Метки
4.9 Регистры
4.10 Настройки
4.11 Опции
4.12 Команды интеграции
4.13 Группировка текста
4.14 Компиляция/отладка программ
4.15 Другое
4.16 Часто используемые команды (желательно запомнить)
Ссылки

1 Опции командной строки


-t {tag} — Открывает файл с функцией и позиционирует курсор на неё. Должен присутствовать файл tags сформированный командой ctags (ctags -h “.h.cpp” ./*).
+N — При открытии файла позиционирует курсор на строке с номером N.


2 VIM-файлы


{home}/.vimrc — Локальный файл конфигурации VIM.
/usr/share/vim/ — Каталог ресурсных файлов VIM.
vimrc_example.vim — Пример конфигурационного файла.


3 Структура команд


[N][команда][объект][N1][команда перемещения]
где:
N — количество повторений команды;
N1 — количество повторений команды перемещения.


4 Команды


4.1 Перемещение по тексту


h, left — Влево.
l, right — Вправо.
j, down — Вниз.
k, up — Вверх.
0, home — В начало строки.
^ — Первый непустой символ в строке.
$, end — В конец строки.
[N]| — На  столбец.
[N]_ — Вниз на -1 строк и на первый не пустой символ.
[N]% — На  процентов от всего буфера.
[N]G, :[N] — Переход на строку (0G – BOF, $G – EOF).
g — Перемещение по тексту. Объекты:
0, home — на левый край экрана;
^ — на первый непустой символ;
m — на половину ширины экрана;
$, end — на правый край экрана;
k, up — на одну строку экрана вверх;
j, down — на одну строку экрана вниз;
g — на первую строку;
o — на [N] байт в буфере;
e — назад до конца слова;
E — назад до конца слова (от пробела до пробела).

f[simb] — На первый найденный справа от курсора символ [simb].
F[simb] — На первый найденный слева от курсора символ [simb].
t[simb] — Перед первым найденный справа от курсора символ [simb].
T[simb] — Перед первым найденным слева от курсора символом [simb].
; — Повторить последнюю команду F,f,T,t в том же направлении.
, — Повторить последнюю команду F,f,T,t в противоположном направлении.
- — На строку вверх и на первый не пустой символ.
+, Enter — На строку вниз и на первый не пустой символ.
G, ^+End — На последнюю строку.
H — На первую строку экрана.
M — На среднюю строку экрана.
L — На последнюю строку экрана.
w, Sh+Right — На слово вперед.
W, ^+Right — На слово вперед (от пробела до пробела).
e — Вперед до конца слова.
E — Вперед до конца слова (от пробела до пробела).
b, Sh+Left — На слово назад.
B, ^+Left — На слово назад (от пробела до пробела).
( — На предложение назад (до точки).
) — На предложение вперед (до точки).
{ — На абзац назад (до пустой строки).
} — На абзац вперед (до пустой строки).
[[ — Вперед на одну секцию или до { в начале строки.
][ — Вперед на одну секцию или до } в начале строки.
]] — Назад на одну секцию или до { в начале строки.
[] — Назад на одну секцию или до } в начале строки.
^G, :file — Информация о текущем положении курсора в тексте.
^] — Переход по ссылке или на определение функции.
^T — Возврат после перехода по ссылке.
^O — Назад по списку переходов.
^I, Tab — Вперёд по списку переходов.
:ju — Список переходов.

4.2 Прокрутка экрана


^+E — Вниз на одну строку.
^+D — Вниз на scroll строк. если использовать цифру то далее она будет по умолчанию.
^+F, PgDwn — Вниз на одну страницу.
^+Y — Вверх на одну строку.
^+U — Вверх на scroll строк. если использовать цифру то далее она будет по умолчанию.
^+B, PgUp — Вверх на одну страницу.
zEnter — Прокрутка вверх, пока курсор не окажется на первой строке.
zt — Тоже, но курсор остаётся в той-же строке.
z[N]Enter — Изменить размер окна до  строк.
z. — Прокрутка помещающая строку с курсором в центре экрана.
zz — Тоже, но курсор остается в том же столбце.
z- — Прокрутка вниз, пока курсор не окажется в на последней строке.
zb — Тоже, но курсор остаётся в том же столбце.
zl — На один символ влево.
zh — На один символ вправо.
zL — На полуширину экрана влево.
zH — На полуширину экрана вправо.
zs — Помещает курсор на левый край.
ze — Помещает курсор на правый край.

4.3 Смена режимов


Ins, i, a — Переход в режим вставки.
v — Визуальный строчный режим (с точностью до символа).
V — Визуальный строчный режим (с точностью до строки).
^V — Визуальный блочный режим.
gv — Возврат к области, выделенной в прошлый раз.
: — Командный режим.
r — Переход в режим замены.
gR — Переход в виртуальный режим замены.
ESC — Возврат в нормальный режим.

4.4 Работа с файлами


:q — Выход (если не требует сохранения).
:q! — Закрыть окно без сохранения.
:qa! — Выход из всех открытых файлов без сохранения.
:x — Выход из всех открытых файлов без сохранения.
:wqa — Выход из всех файлов с сохранением.
:w — Запись в файл.
:w! — Запись в файл даже если он только для чтения.
:wq[!] — Сохранить и выйти.
ZZ — Сохранить и выйти.
:r — Загрузить файл в позицию курсора.
:e [++opt] [+cmd] [] — Открыть новый файл заместив старый (без имени файла – перечитывает текущий).
Доступные опции [++opt]:
enc — перекодировка (++enc=cp866);
ff — формат файла (++ff=unix).

Доступные команды [+cmd]:
+ — начать с конца файла;
+ — начать с указанной строки;
+/ — начать с первой строки в которой встречается шаблон .

:e! [++opt] [+cmd] [] — Открыть новый файл заместив старый и игнорируя все изменения (без имени файла – перечитывает текущий).
:e #[count] — Открыть файл под номером из :files.
:sp — Открыть в новом окне.
gf, [f — Редактировать файл под курсором.


4.5 Редактирование


x, del — Удаление символа под курсором.
X — Удаление символа перед курсором.
u, :u — Откат.
U — Отменить все изменения, повлиявшие на текущую строку.
[reg]^R, :red — Накат, вставка из регистра.
С — Удалить от курсора и до конца строки с переходом в режим ввода.
c — Изменение, удаление и ввод нового.
l — символ, аналог s;
c — строку, аналог S;
[N]o — удаление по команде перемещения “o” [N] раз.

D — Удалить от текущего символа до конца строки.
[reg]d — Вырезать часть строки в регистр [reg]. Объекты:
l — аналог x;
h — аналог X;
d — текущей строки;
w — до конца слова;
$ — до конца строки;
[N]o — удаление по команде перемещения “o” [N] раз.

o, O — Вставка новой строки до и после текущей, с переходом в режим вставки.
J — Объединить строку с последующей.
r[симв] — Заменить символ под курсором на [симв].
gr[симв] — Заменить виртуальный символ под курсором на [симв].
gJ — Тоже, но не вставляя новых пробелов.
[reg]y[com] — Копирование в регистр [reg(«a)] строк через которые перенесет команда [com].
[reg]yy, Y — Копирование в регистр [reg(«a)] текущую строку.
[reg]p — Вставка текста из регистра [reg(«a)] после курсора.
P, MidMouse — Вставка текста из регистра перед курсором.
gp — Тоже что и p, но курсор помещается в конец вставленного текста.
gP — Тоже что и P, но курсор в конец вставленного текста.
]p — Тоже что и p, но дополнительно изменяется отступ вставляемого текста, аналогично отступу текущей строки.
]P — Тоже что и P, но дополнительно изменяется отступ вставляемого текста, аналогично отступу текущей строки.
. — Повторение предыдущей команды изменившей буфер.
g~, ~ [com] — Изменение регистра букв на участке текста, через который перенесёт команда [com].
g~ ~ — Изменение регистра букв в текущей строке.
gu[com] — Превращение букв в строчные на участке текста переноса команды [com].
guu — Превращение в строчные буквы в текущей строке.
gU — Превращение букв в прописные.
gUU — Превращение в прописные буквы в текущей строке.
//g?[com] — Перекодировка по алгоритму rot13 на участке текста переноса команды [com].
g?? — Перекодировка по алгоритму rot13 в текущей строке.
[N]^A — Добавить число к числу в позиции курсора.
[N]^X — Вычесть число от числа в позиции курсора.
! — Обработка внешней программой.
= — Расстановка отступов для языка программирования С.
<[com] — Сдвиг влево на значение (shiftwidth) строк, через которые перенесла бы команда[com].
<< — Сдвиг влево текущей строки.
>[com] — Сдвиг вправо на значение (shiftwidth) строк, через которые перенесла бы команда[com].
>> — Сдвиг вправо текущей строки.

4.6 Поиск


/{str}[/[off]] — Переход вперёд на смещение искомой строки .
?{str}[?[off]] — Переход назад на смещение искомой строки .
/ — Повторить последний поиск в прямом направлении.
? — Повторить последний поиск в обратном направлении.
n — Повторить последний поиск.
N — Повторить последний поиск в обратном направлении.
* — Поиск в прямом направлении идентификатора под курсором.
# — Поиск в обратном направлении идентификатора под курсором.
gd — Перейти к локальному определению переменной под курсором.
gD — Перейти к глобальному определению переменной под курсором.
:/[search] — Поиск в прямом порядке.
:?[search] — Поиск в обратном порядке.
:[address]s/[search]/[repl]/[gci] — Поиск [search] и замена на [repl] (в режиме VISUAL – без адреса и в выделенной области)
[gci]:
< > — первого вхождения;
— всё;
— с запросом подтверждения;
— игнорируя регистр.

[address]:
<%> — весь текст;
<1> — первая строка;
<.> — текущая строка;
<$> — последняя строка;
<1,3> — между строками 1–3;
<.,$> — от текущей до последней.

4.7 Манипуляции с окнами


^W — Операции с окнами:
i, d, f — новое окно с i-переменой, d-определением, f-файлом под курсором;
n — открыть новое окно;
s — сдублировать еще одно окно от текущего (горизонтально);
v — сдублировать еще одно окно от текущего (вертикально);
с, q — закрыть текущее окно;
o — закрыть все остальные окна;
r — сдвиг вверх;
R — сдвиг вниз;
x — сдвиг на другое окно с активизацией другого окна;
K — переместить текущее окно вверх;
J — переместить текущее окно вниз;
H — переместить текущее окно влево;
L — переместить текущее окно вправо;
k, Up — активизировать окно сверху;
j, Down — активизировать окно снизу;
h, Left — активизировать окно слева;
l, Right — активизировать окно справа;
w — активизировать следующее окно;
p — активизировать предыдущее окно;
+ — увеличить высоту окна на одну строку;
- — уменьшить высоту окна на одну строку;
> — увеличить ширину окна на один символ;
< — уменьшить ширину окна на один символ;
= — сравнять размеры окон;
_ — установить максимальную высоту окна;
1_ — установить минимальную высоту окна;
| — установить максимальную ширину окна;
1| — установить минимальную ширину окна.

:sp — Разделить окно по горизонтали.
:vs — Разделить окно по вертикали.
:new — Создать новое окно (горизонтальное разделение).
:vne — Создать новое окно (вертикальное разделение).

4.8 Метки


m[M] — Установить метку в позицию курсора.
m», m' — Установить метку предыдущего контекста.
:[N]ma, [N]k M — Установить метку на строке .
'M — Перемещение в начало строки с меткой .
`M — Перемещение на метку .
'[ — Первый непустой символ в первой строке части текста, над которой производилась последняя операция.
"[ — Первый символ части текста, над которой производилась последняя операция.
'] — Первый непустой символ в последней строке части текста, над которой производилась последняя операция.
"] — Последний символ части текста, над которой производилась последняя операция.
:marks — Показать список меток.
:marks ABC.. — Показать метки ABC.. .
% — Переход на противоположную скобку: ()[].... .
[( — Переход к предыдущей незакрытой ( .
[{ — Переход к предыдущей незакрытой { .
[) — Переход к следующей не открытой ( .
[} — Переход к следующей не открытой } .
]m — Переход к следующему началу метода (Java).
]M — Переход к следующему концу метода (Java).
[m — Переход к предыдущему началу метода (Java).
[M — Переход к предыдущему концу метода (Java).
[# — Переход на предыдущий незакрытый #if или #else.
]# — Переход на следующий неоткрытый #else или #endif.
[*, [/ — Переход на предыдущее начало С-комментария /*.
]*, ] / — Переход на следующий конец С-комментария */.

4.9 Регистры


"" — Безымянный регистр (используется по умолчанию).
«0 — Содержит текст прочитанный последней командой 'y'.
“1-»9 — Сдвиговые регистры удалённого и изменённого текста.
«- — Заполняется при удаление текста, занимающего менее одной строки.
“a-»z — Именованные регистры, заполняются только при указании их специально.
«. — Последний вставленный текст.
"% — Содержит имя редактируемого файла.
"# — Содержит имя альтернативного файла.
«: — Последняя команда в режиме ':'.
"= — Ввод выражений.
"* — Хранит в себе выбранный мышью текст (X-Window).
«/ — Регистр последнего поиска.
:reg [reg] — Печать содержимого регистров.
q[reg] — Ввод регистра [reg] до нажатия q.
@[reg] — Выполнения команд в регистре [reg].

4.10 Настройки


:set — Работа с опциями (без имени опции показывает установленные опции).
all — показать все опции;
termcap — показать только терминальные опции;
— активирует опцию если она логическая;
! — инвертирует опцию;
& — устанавливает стандартное значение опции;
no — деактивирует опцию;
= — установка значения опции в ;
? — показать значение опции.

:options — Установка различных опций.

4.11 Опции


ai — При начале новой строки отступ копируется из предыдущей.
aw — Сохраняет содержимое файла, если он был изменен перед выполнением некоторых команд.
bk — Создаёт резервную копию файла при перезаписи.
bkc — Определяет метод создание резервной копии:
— Копирует существующий файл и перезаписывает старый;
— Переименовывает существующий файл и создает новый;
— Выбирает наиболее оптимальный вариант.

bin — Редактирование файла в бинарном режиме.
dict — Список файлов с словарями автозавершения ключевых слов (разделяются запятыми, переключение Ctrl-X + Ctrl-K).
dy — Изменяет способ отображение текста.
ef — Имя файла с ошибками в режиме быстрой отладки.
efm — Описание формата строки файла с ошибками, записанное в стиле scanf.
fenc= — Перекодировать файл в кодировку (set fenc=koi8-r).
ff= — Изменить формат файла на  (dos,unix,mac).
fcl — Если равно “all”, то группировка автоматически закрываются, при выходе курсора за её пределы.
fdm — Определяет метод группировки для текущего окна.
ic — Игнорировать регистр при поиске.
mef — Имя файла ошибок, возникших при выполнении команды :make .
mouse=a — Включить мышь в X или GUI.
mp — Программа, используемая при выполнении команды :make .
ml — Включает непосредственное включение строки конфигурации в редактируемый файл.
number — Показывать номера строк.
scrollbind — Установить совместную прокрутку содержимого окон.
sbr — Символы, которыми обозначаются автоматически перенесённые строки.
sm — Если установлено, то при вводе закрывающей скобки происходит быстрая подсветка соответствующей ей открывающей скобки.
sw — Число пробелов используемых при автоотступе.
ts — Размер табуляции.
tw — Максимальное число символов, которые могут быть введены в одну строку.
tsr — Список файлов, по которым осуществляется поиск словарных статей (+X + +T).
ul — Максимальное число изменений, которые могут быть отменены.
ve — Включает автоматическое заполнение пробелами/табуляторами при навигации по тексту.
vb — Заменить звуковой сигнал визуальным.
wrap — Заворачивание строк длиннее ширины экрана.
wb — При перезаписи файла, создается его временная копия.

4.12 Команды интеграции


:help com — Получение помощи по команде . Префиксы команд:
<ничего> — нормальная команда;
v_ — визуальная команда;
i_ — вставочная команда;
: — команда командной строки;
с_ — редактирование командной строки;
- — командные аргументы.

:! com — Запускает в оболочке команду .
:!! — Повторяет предыдущую команду :! .
:r! com — Вставить в позицию курсора «выхлоп» команды .
:r file — Вставляет в текст содержимое файла .

4.13 Группировка текста


:mkview — Создание/сохранение группировок файла.
:loadview — Загрузка группировок файла.
zf — Создать группировку выделенного участка (маркер группировки).
zfap — Создать группировку параграфа (маркер группировки).
zd — Удалить группировку.
zE — Удалить все группировки.
zo — Открыть текущую группировку.
zO — Открыть текущую группировку рекурсивно.
zr — Открыть все группировки.
zc — Скрыть/закрыть текущую группировку.
— Скрыть/закрыть текущую группировку рекурсивно.
zM — Скрыть/закрыть все группировки.

4.14 Компиляция/отладка программ


:make — Вызов команды make (сборка проекта).
:cc[numb] — Отображение ошибки с указанным номером.
:cn — Перейти к следующей ошибке.
:cp — Перейти к предыдущей ошибке.
:cr — Перейти к первой ошибке.
:cla — Перейти к последней ошибке.
:cq — Выйти из программы с возвратом кода ошибки.
:cf [file] — Загрузить указанный файл в качестве файла ошибок.
:cl — Отобразить все ошибки.
:copen — Открыть окно со списком ошибок.
:cclose — Закрыть окно со списком ошибок.
:cscope?

4.15 Другое


^p, ^n — Дополнение слова используя в качестве словаря весь текст или дополнительные источники (include файлы).
Sh+K — Вызов man по команде под курсором.
[i — Показать определение (included) переменной, функций ... .
[d — Показать определение (defined) МАКРО.
ga — Информация о символе под курсором.
g ~ [com] — Изменение регистра букв на участке текста, через который перенесет команда [com].
:ls — Список буферов.
:badd [file] — Добавить файл в буфер.
:bdelete [N] — Выгрузить буфер.
:buffer [N] — Перейти к буферу [N].
:print — Распечатать.
:iabbrev — Описание аббревиатур (:iabbrev L$ Linux).

4.16 Часто используемые команды (желательно запомнить)


[N]G — Переход на строку , 0G – BOF, $G – EOF.
% — Переходит на противоположную скобку: ()[].... .
^] — Переход по ссылке или на определение функции.
^T — Возврат после перехода по ссылке.
^O — Назад по списку переходов.
^I — Вперёд по списку переходов.
u, :u — Откат.
U — Отменить все изменения, повлиявшие на текущую строку.
^R,:red — Накат.
. — Повторение предыдущей команды изменившей буфер.
m[M] — Установить метку в текущую позицию.
'M — Перемещение в начало строки с меткой .
`M — Перемещение на метку .
:copen — Показать окно ошибок (после вызова команды типа make).
^p, ^n — Дополнение слова используя в качестве словаря весь текст или дополнительные источники (include файлы).
[i — Показать определение переменной, функций ... .

Ссылки

Использование Vim для редактирования простого текста

Про Vim сказано и написано более чем достаточно. Но большинство материалов представляют собой либо самые первоначальные сведения, либо же советы матерых профессионалов. В результате для того, чтобы приспособить редактор для решения стоящих перед пользователем задач, приходится перелопатить кучу мануалов. Перед осознанием масштаба необходимой работы, нужен нешуточный стимул, чтобы решиться на такое. И вполне может возникнуть резонный вопрос: а зачем мне это? Помимо того, что интересно «пощупать» редактор, о котором столько разговора, должно быть что-то еще?

Конкретно для меня стимулом явилась возникшая сложность при работе с переводами. Проблема заключалась в следующем: несмотря на разрешение экрана в 1920х1200 сделать так, чтобы оба текста располагались перед глазами, было практически невозможно. Да и дергаться мышью туда-сюда, управляясь с полосами прокрутки, запоминая положения текстовых фрагментов, довольно таки неудобно. Консольный текстовый редактор, управление которым осуществляется клавиатурой, представлялся для меня логичным решением. Оставалось только разобраться в нем и из огромного массива информации выбрать только то, что нужно.

Забегая вперед, скажу, что информацию пришлось собирать фактически по крупицам. Основное направление в использовании Vim в качестве редактора «для программистов» привело к тому, что вопросам обработки «простого» текста уделяется мало внимания. В конце-концов, с поставленной задачей, как мне кажется, удалось справиться.



Первоначальные сведения о работе редактора.



Про командный режим, режим вставки, навигации по тексту и т.п., написано более чем достаточно. Однако все это можно свести к одной команде — vimtutuor. Это, как понятно из названия, обучалка базовым принципам Vim. Если вашим дистрибутивом является Ubuntu, то сперва необходимо установить полную версию редактора:

sudo apt-get install vim-full

Единственным значимым, на мой взгляд, аспектом, который не охватывает туториал — является работа в визуальном режиме. Но здесь все просто: В командном режиме нажимаем клавишу «v», выделяем необходимый кусок текста, после чего выполняем с ним необходимую операцию: будь то форматирование, удаление или копирование.

Наиболее важным вопросом, на который следует ответить перед использованием Vim для обработки текста — это перенос набранного текста по строкам. По умолчанию редактор будет писать текст одной длинной строкой, границей которой будет нажатие клавиши Enter.
Это хорошо для редактирования исходного кода, но совершенно неприемлемо для написания текста. Решения здесь два. Использовать команду

:set wrap

Это заставит редактор переходить на другую строку при достижении края окна терминала, но при переходе не будет установлен символ конца строки. Таким образом, все, что мы наберем до нажатия Enter, будет являться одной длинной строкой. Это не очень удобно, поскольку навигация по строкам является довольно важным аспектом редактирования. Решением в данной ситуации будет использовании команды

:set tw=80

Она установит длину строки в 80 символов, что, на мой взгляд, является оптимальным.
При достижении указанного значения, редактор перейдет на другую строку, поставив символ окончания строки.

Форматирование текста


Следующим вопросом, на который необходимо было найти ответ — как осуществлять форматирование текста. Для этого пригодятся следующие команды:

:ce - выравнивает строку по центру
:ri - выравнивает строку по правому краю
:le - выравнивает строку по левому краю


Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке):

:source $VIMRUNTIME/macros/justify.vim

После этого командой "_j" в режиме редактирования можно выровнять выделенный текст «по параграфам».
Несмотря на то, что мы задали фиксированную ширину, при редактировании текста может получиться ситуация, когда одна строка окажется длиннее, или, напротив, короче. Это вполне логично — поскольку строка заканчивается символом переноса строки, который может быть затерт или смещен влево. Привести абзац к фиксированной ширине можно выделив текстовый блок в визуальном режиме и воспользоваться командой «gq».

Проверка орфографии.


Неотъемлемой функцией текстового редактора для меня является проверка орфографии. В Vim этот вопрос решается так:
Качаем архивы со словарями. Разархивируем их в папку /tmp/dict (без подкаталогов внутри).
Создаем папку
mkdir -p ~/.vim/spell/
Далее формируем словарь в Vim-формате командой:
:mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU — для русского языка
:mkspell! ~/.vim/spell/en /tmp/dict/en_US — для английского

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

:setlocal spell spelllang=ru_ru,en_us

Работа с несколькими документами.


Для открытия нового окна используем команды:

:new — создает новый документ в новом окне

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

:Sex

Откроется подобие файлового менеджера, в котором можно выбрать требуемый для редактирования файл. Перемещение из окна в окно осуществляется следующим образом: Наживаем CTRL-w, а затем стрелкой курсора переходим к нужному окну. Вместо курсора можно воспользоваться навигационными клавишами — h,j,k,l
После того, как все требуемые документы открыты в одном окне, необходимо расставить их по местам, выбрав требуемый размер. Это делается так:
CTRL-w, а затем навигационная клавиша, только с зажатым шифтом -H,J,K,L соответственно.

Разложив окна, можно подогнать их размер под конкретные нужды можно так:
CTRL-W +
CTRL-W —
изменяют размер окна по вертикали;
CTRL-W <
CTRL-W >
изменяет размер окна по горизонтали.

В качестве резюме.



Если изложенное выше оказалось для вас полезным, а Vim оказался пригодным для написания и редактирования текстов, самое время перейти к составлению своего конфигурационного файла. Для этого Открываем в своем домашнем каталоге файл vimrc — и вписываем туда команды, которые сочли полезными для каждодневного использования. У меня это ширина текста, проверка орфографии и использование макросадля выравнивания текста «по параграфам».
Кроме того, в случае если используется юникод, настоятельно рекомендую ознакомиться с материалами на ru.wikibooks.org/wiki/Vim и прописать в конфигурационный файл переназначение символов. Потому как постоянное переключение русской-английской раскладки в командном режиме реально утомляет.

p.s. Сперва я хотел разместить этот топик в блоге, посвященному Vim. Нопотом решил, что его читатели уже знакомы с текстовым редактором и столь начальная информация будет не интересна. А вот для новичков в мире *nix, слышавших про «войны» текстовых редакторов, материал будет познавательным и позволит более быстро начать использовать редактор для повседневных нужд.

VIM как Rails IDE в стиле TexMate благодаря набору скриптов от Akita

http://habrahabr.ru/blogs/ruby/68013/
В далекие времена, когда я ещё писал на c\c++, я пользовался замечательным редактором VIM, знал минимальный набор vim-фишек, и был в целом доволен его работой. Несколько позже я стал изучать Rails и программировать на Ruby. Я достаточно быстро понял, что базовой поставкой VIM не обойтись, попробовал пару найденных в интернете руководств по доведению VIM до уровня полноценной IDE, наткнулся на подводные камни, и быстро сдался. В тот момент мне хотелось изучать в первую очередь именно Rails, а не VIM.
Немного помытарился с разными другими редакторами и IDE типа Aptana, Geany, Eclipse и т.п. пока не наткнулся на полностью, на тот момент, удовлетворящий меня Netbeans. О Netbeans можно писать, да и написано, немало хорошего. Как IDE для разработки на Ruby Netbeans просто прекрасен. Я и сейчас использую его в случае, если работаю в Windows. Но однажды я оказался на длительное время не за своим, а за чужим ноутбуком, на котором уже стоял VIM, в месте, где интернет-трафик был сильно ограничен. А Таксовик требовал срочной доработки. Выкачивать ~60мб Netbeans и ещё n-ное количество мб на плагины было не этично, я и снова начал освоение VIM. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails и скринкаст в придачу. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.


Основные фишки этого набора скриптов


  1. FuzzyFinderTexMate — очень удобный поиск файлов в проекте по ctrl+f. К примеру, чтобы найти файл config\routes.rb надо набрать rorb. Или даже и того меньше :)
  2. Набор сниппетов из TexMate и некоторое количество своих (в смысле, NERDSnippets). Очень удобно, набираешь vf + TAB — получаешь validates_format_of :<+attribute+>, :with => /<+regex+>/<+, :on => :<+create+>, :message => "<+is invalid+>"+>, где по TAB скачешь между параметрами, заключёнными в <+...+>. Сниппеты есть для всего, чего угодно, их полный список можно посмотреть в папке snippets в директории с файлами кофигурации VIM.
  3. Дерево проекта, реализованное с помощью NERDTree. Доступно по \+p (обратный слеш и символ p). Переключение с дерева проекта в окно редактирования кода и обратно осуществляется по ctrl+w и стрелка (куда будет стрелка, туда курсор и перескочет), в самом же дереве o — открыть\закрыть папку\файл, R (shift+r) — обновить дерево и по вопросу(?) довольно внятная справка по горячим клавишам.
  4. Подсветка кода (rb, html, rjs, js, erb и т.п.)
  5. Возможности из rails.vim типа перехода по gf на файл модели, если курсор стоит на вызове, например, конструктора. Всяческие :Rake, :Rgenerate и т.п.
  6. Ну и все возможности и навороты VIM, за которые его так любят :)


А вот и скринкаст от автора на эту тему (рекомендую к просмотру):


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

Добиться всего этого очень просто. Вышеупомянутый Akita собрал всё это в одном проекте на github.

Установка


Linux и Mac:

cd ~
git clone git://github.com/akitaonrails/vimfiles.git .vim
cd .vim
git submodule init
git submodule update


Если же у вас Windows, то в первую очередь надо установить Exuberant CTags и msysGit, после чего проделать следующее:

cd %HOME%
git clone git://github.com/akitaonrails/vimfiles.git
cd vimfiles
git submodule init
git submodule update


Далее, вы открываете ваш ~/.vimrc (на Windows %HOME%\_vimrc), и вставляете туда следующие строки:

source ~/.vim/vimrc "Собственно, подцепить все настройки от Akita
"В Windows вместо строчки выше надо вбить %HOME%\vimfiles\vimrc
colorscheme vibrantink "Приятная цветовая схема в стиле TexMate
set nu "Отображать номер астрок
set sw=2 "Заменяет TAB на 2 пробела
set sts=2 "Аналогично, но в случае автоотступа
let g:fuzzy_ignore = "gems/*"


Послесловие



Собственно, я очень доволен работой этих скриптов и VIM, и теперь на своём основном linux-ноутбуке пересел с Netbeans на VIM. Основные аргументы — удобство в работе (впрочем, оно сравнимо), скорость работы, отсутвие необходимости работать мышью (хотя VIM поддерживает мышь) и скорость загрузки (холодный старт Netbeans — секунд 30).
Не обошлось, конечно, и без небольших подводных камней. Чтобы работала вся эта красота нужен VIM собранный с поддержкой Ruby. Там, где я изначально настраивал это окружение, была установлена Mandriva 2010 и почему-то даже в самом расширенном vim-enhanced такой поддержки не было. Впрочем, многое работало и без неё (но не работал, например, FuzzyFinderTexMate). Проверяется это легко:
vim --version | grep ruby
или, если нет grep, то просто vim --version и поискать +ruby (собран с поддержкой) или -ruby (собран без поддержки).

На всякий случай скажу, что в TexMate я никогда не работал :)

Немного ссылок


Сам блог Akita on Rails
Пост про VIM + RAILS + IDE: часть 1, часть 2
То же, но под Windows

Обновление №2

Как правильно подсказывают в комментариях: статья на хабре о дебаге Ruby-приложений в VIM

Обновление:

Интересные приёмы в Ruby, которые вы можете использовать в своём коде

http://habrahabr.ru/blogs/ruby/48740/
В этом посте я хочу представить вам 21 интересную особенность Ruby. Многие из этих особенностей могут быть не очевидны новичку, в то время как более опытный разработчик использует их каждый день. Для выполнения примеров кода удобнее всего использовать «интерактивный» Ruby — irb. Если же у вас ещё нет своего Ruby, то воспользуйтесь онлайн интерактивным интерпретатором. Итак, приступим.


1. Быстрое получение совпадений из регулярного выражения


Чтобы получить данные из текста используя регулярные выражения, как правило применяют метод match. Сейчас я покажу как использовать его наиболее эффективно:

email = "Fred Bloggs "
email.match(/<(.*?)>/)[1]            # => "fred@bloggs.com"
email[/<(.*?)>/, 1]                  # => "fred@bloggs.com"
email.match(/(x)/)[1]                # => NoMethodError [:(]
email[/(x)/, 1]                      # => nil
email[/([bcd]).*?([fgh])/, 2]        # => "g"

В комментариях мне делают замечание, что тема регулярных выражений не раскрыта. Раскрываю:
name, mail = *email.match(/(.+)\s<(.*)>/)[1..2]
puts name               # "Fred Bloggs"
puts mail               # "fred@bloggs.com"


2. Синоним для Array#join


Многие знают, что если использовать метод Array#* для «умножения» массива на число, то массив будет увеличен в заданное количество раз путём дублирования его элементов. Но но всем известно, что если вместо числа, «умножить» массив на строку, то это сработает как метод Array#join:
%w{this is a test} * ", "                 # => "this, is, a, test"
h = { :name => "Fred", :age => 77 }
h.map { |i| i * "=" } * "\n"              # => "age=77\nname=Fred"



3. Быстрое форматирование десятичных чисел.


Если вы хотите сделать форматированный вывод, например, для указания цен, скорее всего будете использовать метод sprintf, но не спешите, Ruby предлагает более интересную возможность:
money = 9.5
"%.2f" % money                       # => "9.50"


4. Окружаем текст тегами


Конечно предыдущий пример можно использовать не только для чисел, но и для строк:
"[%s]" % "same old drag"             # => "[same old drag]"

И даже для массивов:
x = %w{p hello p}
"<%s>%s" % x                    # => "hello
"


5. Удаляем директорию со всем содержимым


Нет-нет, не спешите писать код на bash, в Руби есть библиотека fileutils:
require 'fileutils'
FileUtils.rm_r 'somedir'


6. Разбиваем массивы и хэши


Можно использовать «*» чтобы «разбить» перечисляемые типы данных (массивы и хэши). Чтобы было понятно о чём идёт речь, вот несколько примеров:
a = %w{a b}
b = %w{c d}
[a + b]                              # => [["a", "b", "c", "d"]]
[*a + b]                             # => ["a", "b", "c", "d"]

a = { :name => "Fred", :age => 93 }
[a]                                  # => [{:name => "Fred", :age =>93}]
[*a]                                 # => [[:name, "Fred"], [:age, 93]]

a = %w{a b c d e f g h}
b = [0, 5, 6]
a.values_at(*b).inspect              # => ["a", "f", "g"]

Получаем из массива хэш:
fruit = ["apple","red","banana","yellow"] # ["apple", "red", "banana", "yellow"]
Hash[*fruit]                              # {"apple"=>"red", "banana"=>"yellow"}


7. Убираем объявление переменных.


Вместо объявления переменных с каким-то, зачастую пустым, начальным значением, можно это сделать «на лету». Таким образом можно совместить объявление переменной и какие-то манипуляции над ней. Приём особенно полезен, когда не известно, была ли объявлена эта переменная раньше:
(z ||= []) << 'test'


8. Использование не строковых ключей хэша


Такое применение можно встретить не часто, но иногда это может оказаться действительно полезно:
does = is = { true => 'Yes', false => 'No' }
does[10 == 50]                       # => "No"
is[10 > 5]                           # => "Yes"


9. Логические and и or могут объединить операторы в одну строку


Многие разработчики используют это приём чтобы сократить код, убрав ненужное разбиение на строки:
queue = []
%w{hello x world}.each do |word|
  queue << word and puts "Added to queue" unless word.length <  2
end
puts queue.inspect

# Output:
#   Added to queue
#   Added to queue
#   ["hello", "world"]


10. Выполнение кода, только если если файл запущен непосредственно


Вы можете использовать один и тот же код как в качестве самостоятельного скрипта, так и библиотеки. Тогда у вас может возникнуть необходимость выполнять части кода только если они использованы как самостоятельный скрипт или наоборот, подключаются с помощью require:
if __FILE__ == $0
  # Этот участок будет выполнен, только если файл выполнен как самостоятельная программа
end


11. Быстрое массовое присвоение


Что может быть проще:
a, b, c, d = 1, 2, 3, 4


12. Диапазоны вместо нескольких сравнений


Больше никаких if x > 1000 && x < 2000, теперь можно писать так:
year = 1972
puts  case year
        when 1970..1979: "Семидесятые"
        when 1980..1989: "Восьмидесятые"
        when 1990..1999: "Девяностые"
      end



13. Перечисляемые структуры вместо повторения кода


%w{rubygems daemons eventmachine}.each { |x| require x }


14. Тернарный оператор


О тернарном операторе обычно узнают на ранних этапах изучения Руби, но почему-то используют не часто. Тернарный оператор — не панацея, но иногда способен сделать многое проще:
puts x == 10 ? "x равно десяти" : "x не равно десяти"

# Конечно, можно сделать и присвоение:
LOG.sev_threshold = ENVIRONMENT == :development ? Logger::DEBUG : Logger::INFO


15. Несколько тернарных операторов


Безусловно, это может вызвать проблемы с читаемостью кода, но всё же:
qty = 1
qty == 0 ? 'none' : qty == 1 ? 'one' : 'many'

Да, немного запутанно… Так будет понятнее:
(qty == 0 ? 'none' : (qty == 1 ? 'one' : 'many'))


16. Избавляемся от избыточных логических выражений


Частенько можно увидеть что-нибудь вроде этого:
def odd?(x)
  if x % 2 == 0
    return false
  else
    return true
  end
end

Но это слишком длииино! Воспользуемся тернарным оператором:
def odd?(x)
  # Кстати, return можно опустить
  x % 2 == 0 ? false : true
end

Уже неплохо, но это тоже длинно, зачем нам использовать тернарный оператор, если «==» и так возвращает true или false:
def odd?(x)
  x % 2 != 0
end


17. Полный backtrace исключения


def do_division_by_zero; 5 / 0; end
begin
  do_division_by_zero
rescue => exception
  puts exception.backtrace
end


18. Перебираем в итераторе как одиночные объекты, так и перечисляемые


[*items].each do |item|
  # ...
end

В этом примере, если items — одиночный объект, то он будет преобразован в массив, благодаря заключению в «[]», если же это массив, то с ним ничего не произойдёт, потому что «[]» и «*» скомпенсируют друг-друга.

19. Перед блоком rescue не обязательно писать begin


def x
  begin
    # ...
  rescue
    # ...
  end
end

def x
  # ...
rescue
  # ...
end


20. Блоки комментариев


Для комментирования можно использовать не только «#», но и такую конструкцию:
puts "x"
=begin
  this is a block comment
  You can put anything you like here!

  puts "y"
=end
puts "z"


21. Rescue для спасения


Можно использовать однострочную форму rescue когда важно во что бы то ни стало вернуть значение:
h = { :age => 10 }
h[:name].downcase                         # ERROR
h[:name].downcase rescue "No name"        # => "No name"


Бонус 22. Параметр, заданный по-умолчанию


Как можно опознать, задан ли параметр метода вызывающей программой или было взято значение по-умолчанию.
Один из возможных вариантов:
def foo(a, b=(flag=true; 666))
  puts "b равно #{b}, flag равно #{flag.inspect}"
end

foo 100      # b равно 666, flag равно true
foo 100, 666 # b равно 666, flag равно nil
foo 100, 400 # b равно 400, flag равно nil


Бонус 23. Переводим из 10 системы счисление в любую другую с базисом от 2 до 36


1234567890.to_s(2)  # "1001001100101100000001011010010"
1234567890.to_s(8)  # "11145401322"
1234567890.to_s(16) # "499602d2"
1234567890.to_s(24) # "6b1230i"
1234567890.to_s(36) # "kf12oi"

Полезные ссылки по Linux

интересный сайт     http://welinux.ru/

скачать дистрибутив  http://mirror.yandex.ru/

Linux и Windows: помощь админам и пользователям - http://www.guruadmin.ru/ 

ЛинСовет: Полезные Советы По Linux -  http://linsovet.com/

Заметки о Linux - http://noteslinux.blogspot.com  http://devblog.info/category/linux/programs/

The Chakra Project = Arch Linux + LiveCD + KDE 4 - http://chakra-project.org/news/  

#Записки о Unix/Linux/BSD/Solaris - http://unixa.ru/chtivo/ 

Блог об Ubuntu -        http://myubuntu.ru 

Большая Linux библиотека для пользователей OS Linux и ПО для нее - http://linux-admin.net.ru/

5 способов поиска файлов в Linux, используя терминал

Сегодня мы рассмотрим нескольно наиболее популярных способов поиска файлов в Linux, используя терминал.
1) find : Для поиска файлов из командной строки вы можете использовать команду “find”. У этой команды следующий синтаксис:
find path criteria action

“path” - Секция для указания директории поиска. Если ничего не указано поиск идет по текущей директории.
“criteria” - Опции поиска.
“action” -Опции, которые влияют на состояние поиска или контролируют его, например,
“–print”

2) locate : Команда “locate” это альтернатива команде “find -name”. Команда find ищет файлы в выбранной части файловой системы и процесс может быть не очень быстрым. С другой стороны, команда locate ищет файлы в базе данный, созданной специально для этих целей /var/lib/locatedb, что происходит намного быстрее. Для обновления базы используется команда updatedb.


3) whereis :  “whereis” возвращает место расположения кода (опция -b), ман-страниц  (опция -m), и исходные файлы (опция -s) для указанной команды. Если опции не указываются, выводится вся доступная информация. Эта команда быстрее чем “find” но менее полная.

4) which :  Команда “which” ищет все пути перечисленные в переменной PATH для указанной команды.

5) type :
При вызове без опций показывает, как имена будут интерпретироваться
при использовании в качестве имени команды. Если использована опция -a, команда type выдает список всех каталогов, где есть выполняемый файл с
соответствующим именем. В список включаются также псевдонимы и функции,
если только не указана опция -p. К
хэшу команд не обращаются, если указана опция -a. Команда type возвращает 0,
если хоть один из аргументов найден, и 1 в противном случае.

10 примеров использования команды Ping

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

Пример 1. Изменение интервала времени между отправкой пакетов

По умолчанию пакеты посылаются с промежутком в одну секунду. Вы можете изменить это интервал с помощью опции -i.

Увеличение интервала

Пример: Ждем 5 секунд перед отправкой следующего пакета.
$ ping -i 5 IP  

Уменьшаем интервал

Пример: Ждем 0.1 секунду перед отправкой следующего пакета.
# ping -i 0.1 IP  
Заметка: Только суперпользователь может указывать интервал меньше 0.2 секунды. В противном случае вы увидите такое сообщение.
$ ping -i 0.1 127.0.0.1  
PING 0 (127.0.0.1) 56(84) bytes of data.  
ping: cannot flood; minimal interval, allowed for user, is 200ms  

Пример 2. Проверка локального интерфейса

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

Пингуем ноль (0)

Это самый простой и быстрый способ:
$ ping 0  
PING 0 (127.0.0.1) 56(84) bytes of data.  
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.024 ms  
^C  

Пингуем по имени

$ ping localhost  
PING localhost (127.0.0.1) 56(84) bytes of data.  
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.051 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.055 ms  
^C  
--- localhost ping statistics ---  
2 packets transmitted, 2 received, 0% packet loss, time 999ms  
rtt min/avg/max/mdev = 0.051/0.053/0.055/0.002 ms  

Пингуем по IP

$ ping 127.0.0.1
2 packets transmitted, 2 received, 0% packet loss, time 999ms  rtt min/avg/max/mdev = 0.051/0.053/0.055/0.002 ms  
Не должно быть никаких потерь пакетов.

Пример 3. Послать N пакетов и завершить работу

Для автоматического завершения пинга после отправки указанного вами числа пакетов исползуется опция -c.
В следующем примере мы отправим 5 пакетов.
$ ping -c 5 google.com  
PING google.com (74.125.45.100) 56(84) bytes of data.  
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=1 ttl=44 time=731 ms  
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=2 ttl=44 time=777 ms  
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=3 ttl=44 time=838 ms  
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=4 ttl=44 time=976 ms  
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=5 ttl=44 time=1071 ms    
--- google.com ping statistics ---  
5 packets transmitted, 5 received, 0% packet loss, time 4216ms  
rtt min/avg/max/mdev = 731.039/879.129/1071.050/126.625 ms  

Пример 4. Версия команды ping

С помощью опции -V мы можем посмотреть текущую версию команды.
$ ping -V  
ping utility, iputils-sss20071127  

Пример 5. Флуд в сети

Суперпользователь может послать тысячи и более пакетов в короткие сроки с помощью опции -f.
Как показано ниже, ping -f послал более чем 400,000 пакетов за несколько секунд.
# ping -f localhost  
PING localhost (127.0.0.1) 56(84) bytes of data.  
.^C 
 --- localhost ping statistics ---  
427412 packets transmitted, 427412 received, 0% packet loss, time 10941ms  
rtt min/avg/max/mdev = 0.003/0.004/1.004/0.002 ms, ipg/ewma 0.025/0.004 ms  

Пример 6. Звуковой сигнал

Эта опция исползуется редко, но бывает очень полезна. Вы запускается пинг, ответа от хоста нет, вы разбираетесь в чем дело, и как только проблема будет решена и удаленный хост ответит, вы услышите звук.
$ ping -a IP  

Пример 7. Печатать только статистику выполнения команды

С помощью опции -q можно пропустить ответы удаленного хоста и вывести сразу полученную статистику.
$ ping -c 5 -q 127.0.0.1  
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.    
--- 127.0.0.1 ping statistics ---  
5 packets transmitted, 5 received, 0% packet loss, time 3998ms  
rtt min/avg/max/mdev = 0.047/0.053/0.061/0.009 ms  

Пример 8. Изменение размера пакета

Вы можете изменить размер посылаемого пакета используя опцию -s.
Пример: Изменим размер пакета с 56 до 100.
$ ping -s 100 localhost  
PING localhost (127.0.0.1) 100(128) bytes of data.  
108 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.022 ms  
108 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.021 ms  
108 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.020 ms  
^C  
--- localhost ping statistics ---  
3 packets transmitted, 3 received, 0% packet loss, time 1998ms  
rtt min/avg/max/mdev = 0.020/0.021/0.022/0.000 ms  

Пример 9. Длительность выполнения команды

С помощью опции -w мы можем указать время выполнения команды в секундах.
В следующем примере мы будем пинговать локалхост в течение 5-ти секунд.
$ ping -w 5 localhost  
Заметка: В случае одновременного использования опций -w и -c завершение работы утилиты наступит в момент срабатывания первого ограничения.

Пример 10. Краткая статистика с SIGQUIT

Не прерывая команду пинг, можно посмотреть статистику выполнения. Для этого нужна нажать CTRL + | 
$ ping -w 100 localhost  
PING localhost (127.0.0.1) 56(84) bytes of data.  
64 bytes from localhost (127.0.0.1): icmp_seq=10 ttl=64 time=0.021 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=11 ttl=64 time=0.022 ms  
11/11 packets, 0% loss, min/avg/ewma/max = 0.020/0.022/0.022/0.024 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=12 ttl=64 time=0.021 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=13 ttl=64 time=0.022 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=14 ttl=64 time=0.021 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=15 ttl=64 time=0.021 ms  
19/19 packets, 0% loss, min/avg/ewma/max = 0.020/0.022/0.022/0.024 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=31 ttl=64 time=0.022 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=32 ttl=64 time=0.022 ms  
32/32 packets, 0% loss, min/avg/ewma/max = 0.020/0.022/0.022/0.027 ms  
64 bytes from localhost (127.0.0.1): icmp_seq=33 ttl=64 time=0.023 ms  ..  

Источник: http://www.guruadmin.ru/page/10-primerov-ispolzovanija-komandy-ping

Ярлыки

Архив блога