Vim: переход на новую строку по Enter

В Vim в normal mode можно добавить пустую строку после текущей строки с помощью команды 'o' и перед текущей строкой — с помощью команды 'O'. Однако при этом Vim переходит в режим insert mode. Чтобы этого не происходило, я добавил в файл .vimrc такой маппинг:
nmap <CR> o<Esc>
Теперь по нажатию на Enter будет добавлена пустая строка после текущей, курсор перейдет на нее, а Vim останется в normal mode.

Vim: дерево каталогов

Иногда бывает удобно иметь в Vim дерево каталогов как в большинстве IDE. Оно реализовано в отдельном плагине — NERD Tree. При его включении в левой части экрана открывается дополнительное окно (так же, как если была вызвана команда :vsplit) с деревом каталогов, на которую можно переходить с помощью комбинации клавиш Ctrl+W+W, по ней можно перемещаться, открывать каталоги и открывать файлы для просмотра и редактирования

Ubuntu 14.04: расширение пути поиска библиотек по умолчанию

Если для запуска бинарника требуются библиотеки, которые не установлены в системе, а перекомпилировать бинарник нет желания или возможности, можно указать системе, где искать недостающие библиотеки. Один путь - это модифицировать LD_LIBRARY_PATH, добавив туда недостающий путь. Впрочем, это решение часто критикуется (1, 2, 3). Другой вариант - добавить недостающий путь в ldconfig. При этом нет необходимости изменять файл libc.conf - можно создать отдельный файл для своей конфигурации.
Нужно создать файл:
/etc/ld.so.conf.d/filename.conf
записать туда путь к необходимым библиотекам, и затем выполнить команду
sudo ldconfig
которая обновит кэши. Теперь при запуске бинарников заданный путь будет также использоваться для поиска библиотек.

Linux: cложить все числа в файле в командной строке

В предыдущем посте было написано, как выбрать все числа из файла. В итоге у меня получился в файл в каждой строке которого находится число. Эти числа можно обработать с помощью awk. Например, очень легко можно сложить все числа:
awk '{s+=$1} END {print s}' filename

Linux: вывод в консоль всех чисел из файла

Для выборки всех чисел из файла воспользуемся утилитой grep:
grep -o "[0-9]" filename
[0-9] - регулярное выражение, в которое попадают только цифры от 0 до 9. Флаг -о заставляет grep выводить не всю найденную строку, а только то, что задано регулярным выражением. Проблема в том, что таким образом grep выведет все цифры, нам же нужны все числа. Нужно дописать регулярное выражение:
grep -oE "[0-9]{1,}" filename
Флаг -Е разрешает расширенные регулярные выражения (extended regexp), а {1,} определяет длину предыдущего выражения. В нашем случае, будут найдены все последовательности из цифр длиной от одного символа и больше, то есть все числа. Можно также ограничить максимальную длину числа (например, не больше 5 цифр), указав верхнюю границу в выражении:
grep -oE "[0-9]{1,5}" filename
В следующем посте пример того, как обработать полученный вывод.

Linux: вывод в консоль заданных строк из файла

Чтобы вывести в консоль только строки, заданные определенным регулярным выражением, достаточно выполнить команду:
sed -n '/regexp/p' filename
Без опции -n sed выведет помимо заданных строк все строки файла, на место regexp надо подставить регулярное выражение, на место filename - имя файла, /p - это имя команды sed.
Строки можно также выводить по вхождению подстроки:
sed -n '/some_words/p' filename
по номеру:
sed -n '5p' filename
и по диапазону номеров:
sed -n '5,9p' filename
Диапазон также можно задавать двумя подстроками или двумя регулярными выражениями:
sed -n -e '/some_words_1/,/some_words_2/p' filename
sed -n -e '/regexp1/,/regexp2/p' filename
Также можно вывести строки, начиная от заданной и до конца файла:
sed -n '/regexp/,$p' filename

Qt 5.3 QML: Владение объектами С++

По умолчанию объекты, созданные в коде С++ и переданные в QML через Q_INVOKABLE методы или слоты передаются во владение Javascript. То есть если в QML передается указатель на объект, созданный в коде С++ динамически посредством вызова оператора new(), сборщик мусора Javascript удалит его по своему усмотрению: если на него не будет ссылок в Javascript, не будет родительского объекта (QObject::parent() будет пуст), или будет вызван деструктор соответствущего QQmlEngine. Это поведение можно изменить с помощью вызова статического метода:
void QQmlEngine::​setObjectOwnership(QObject * object, ObjectOwnership ownership)
Таким образом, если выставить только что созданному объекту значение QQmlEngine::CppOwnership, владение останется на стороне кода С++, и сборщик мусора его не тронет.