phd_ru: (Default)
Contra vim mortis non crescit herba in hortis

Без vim и листочка не вырастет на бинарном дереве! ;-)

X-Post в ЖЖ.
phd_ru: (Default)
Сохранил файл в vim, а он мне говорит "221B". Двести двадцать один байт, значить. Ничего особенного, простое совпадение. Привлекло моё внимание, как большого поклонника шерлокианы.

X-Post в ЖЖ.
phd_ru: (Default)
Очередные 15 минут славы:

https://twitter.com/VimLinks/status/1587026205181710343

Слава — в ссылке на SO.

X-Post в ЖЖ.
phd_ru: (Default)
https://evrone.com/bram-moolenaar-interview

Никогда раньше его не видел. Но много слышал. ;-)

Найдено в Twitter.
phd_ru: (Default)
У меня в vim опция whichwrap выставлена на максимум: set whichwrap=b,s,h,l,<,>,[,],~. Много лет всё работало прекрасно, и вдруг сломалось. Стрелки влево/вправо перестали перескакивать на пред/след строки.

Сегодня у меня день посвободнее, взялся поискать причину. Нашёл. vim запущенный под screen ресетит эту опцию в set whichwrap=b,s. Сам vim, нигде ни в /usr/share/vim ни в ~/.vim/ ничего нет.

Пришлось добавить микро-плагин для исправления. :-(

X-Post в ЖЖ.

VIM Killer

Apr. 1st, 2020 01:46 pm
phd_ru: (Default)
https://github.com/caseykneale/VIMKiller

Устройство с красной кнопкой для принудительного выхода из vim.

hjkl

Jul. 30th, 2018 04:30 pm
phd_ru: (Default)
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>




https://pbs.twimg.com/media/DjPhF8_U0AA1n48.jpg

return ∑

Jul. 2nd, 2014 12:40 am
phd_ru: (Python)
Чего только люди не придумают.

map (λ x: x, [1,2,3])

def foo(e, a):
    if e ∈ [1,2,3] ∧ ¬a:
        return √(π)
    else:
        return ∑([1,2,3])

Найдено в рассылке python-ideas.
phd_ru: (Linux)
У меня регулярно встаёт задача "найти файлы, в которых N пустых строк подряд и заменить их на M пустых строк, M обычно < N". Сегодня у меня эта задача возникла как часть задачи "удалить в файлах группу строк от __version__ до __copyright__ и оставшиеся пустые строки убрать", поэтому я выкрутился так:
grep -FIlr __version__ . >.list
for f in `cat .list`; do sed -e '/__version__/,/__copyright__/d' $f >.tmp && cp .tmp $f || break; done
for f in `cat .list`; do vim -X -c '%s/\n\n\n\n\+/\r\r\r/' -c up -c q $f || break; done
rm .list .tmp

Но в общем виде я эту задачу решать не умею: grep и sed не очень понимают \n. И vim — не самый подходящий инструмент для неинтерактивной обработки файлов. Подскажите, как это правильно делать?

Upd. grep -Pz помогает; т.е. воспринять весь файл, как одну строку, и в ней искать с помощью перловых регэкспов:
grep -Plrz --exclude-dir=.git --exclude='*.py[co]' '\n\n\n' .

Чем заменить пустые строки — вопрос остаётся.

Другой вариант — vimgrep, но у vimgrep небогатые возможности выбора файлов для поиска. Хорошо, если я ищу только по питоновским файлам:
:vimgrep '\n\n\n\+' **/*.py
Но мне часто приходится искать по директориям, в которых полно файлов без расширений — shell-скрипты, Makefile'ы и т.д. А ** залезет и в файлы, куда залезать не надо — в директории .hg/.git/.svn, в питоновский байткод *.py[co], а это лишнее.

Кстати, мой второй цикл for можно оптимизировать:
vim -X -c ':argdo! %s/\n\n\n\+/\r\r\r/' -c xall `cat .list`
phd_ru: (Default)
В n900 есть печальный баг — при загрузке плей-листов в формате m3u они загружаются почти в обратном порядке: сначала первый mp3, а все остальные наоборот, т.е. если загружать плей-лист из 10 mp3, они загрузятся так: 1 — 10 — 9 — … — 2. Чтобы это исправить я написал скрипт на питоне и макрос для vim, которые переворачивают плей-лист. Ну и перевернул все свои листы, чтобы слушать альбомы в естественном порядке.

Еду сегодня в электричке в гости к [livejournal.com profile] cmike, слушаю музыку. И вдруг понимаю, что порядок опять неправильный. Может, какой плей-лист я забыл перевернуть при записи в n900? Лезу проверять — нет, всё "нормально", перевёрнут. Проверяю другой плей-лист — он перевёрнут, загружаю его — он загружается в прямом, т.е. неправильном порядке.

Вот, думаю, попал. В плеере случился глюк, и он сам собой начал загружать плей-листы в правильном порядке, но у меня-то порядок неправильный. Как исправить?

Ага, можно исправить. Запускаю терминал, и пишу в нём команду
find . -name PlayList.m3u | while read pl; do sort "$pl" > _tmp && mv _tmp "$pl"; done

Через 20 секунд все мои плей-листы приняли нормальный вид, и я поехал дальше, слушая музыку в правильном порядке.

Что, интересно, это был за глюк? Никаких обновлений я давно не ставил. Вот заглючит опять, в нечётный раз, и опять придётся все плей-листы переворачивать.
phd_ru: (Default)
До слёз забавно смотреть на глюки программ с двунаправленными тестами. Пишу "шалом" (ивритом), восклицательный знак, "привет" по-русски, вопросительный знак. В файл это пишется именно в таком порядке: "шалом! привет?"

(g)vim это именно в таком порядке и показывает. Глюк в неправильном порядке еврейских букв. В документации об этом сказано, так что не неожиданно.

gedit показывает так: "?Привет !молаш". Еврейское слово правильно, русское правильно, но слова стоят не в том порядке, и вопросительный знак уехал не туда. Если между "привет" и "шалом" нажать [Enter] и перенести "привет" на другую строку, вопросительный знак магически оказывается на своём месте. Т.е. в gedit свойство BiDirectional - свойство строки, хотя каждое конкретное слово в строке пишется в правильном направлении. Поиск делается нормально, при наборе в диалоге поиска полуслов "шал", "шало" - находит.

Мозилла (Firefox) в textarea показывает "молаш! привет?" Глюк - неправильно размещён восклицательный знак. Это значительно меньший глюк, чем в прочих редакторах. С другой стороны, как Мозилле узнать, что этот латинский символ надо разместить слева? Так что Мозилла не так уж неправа. Видимо, в Мозилле свойство BiDirectional - свойство отдельной буквы.

Что ж теперь, в textarea редактироваться? а для проверки правописания вызывать vim, который у меня плагином ViewSourceWith повешен на нажатие кнопки и меню, и который умеет проверять тексты, написанные на нескольки языках - vim умеет подгружать одновременно неограниченное количество словарей.

Весело реализован поиск в evince (у меня есть словарь в PDF) - буквы для поиска надо вводить в обратном порядке. Т.е. для поиска этого "шалом"а в строке поиска надо вводить "молаш".

vim

May. 7th, 2009 04:50 pm
phd_ru: (Default)

Забавная командная строка:

vim "+$l" -c "execute 'normal ' . substitute('$c', 'c$', '', '') . '|'" $f
Переменные $l, $c, $f передаются извне. ViewSourceWith почему-то передаёт в переменной $c буковку 'c' - приходится удалять. Особенно забавна конструкция substitute('$c', 'c$'...)

Upd. Я написал багрепорт, и в VSW 0.4.2 баг с лишней 'c' исправлен. Командная строка сократилась до

vim "+$l" -c "normal $c|" $f

April 2025

S M T W T F S
  123 45
6789101112
1314 15 16 1718 19
20212223242526
27282930   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 12:38 pm
Powered by Dreamwidth Studios