?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
tabs vs spaces - autodetect
nyaload
_winnie
Периодически правлю исходники из разных источников, с разными coding conventions. Чаще всего надо переключаться между табами и спейсами, но иногда встречаются файлы с 2-пробельными и 8-пробельными отступами, например.

Я считаю, что редактор сам должен определять EOL и настройки идентации, и галочка это включающая должна быть включена по умолчанию. EOL худо-бедно некоторые редакторы научились сами выводить. Или хотя бы не мешать редактировать файл с произвольным EOL. А вот с табами и спейсами беда.

Написал автоматический определитель спейсов и табов в файле ( http://dobrokot.ru/dump/tab_space_select.py ). Сначала смотрю на статистику строк в файле, если её нет - то на соседние файлы с тем же расширением. Ещё круче, если бы текстовый редактор смотрел на соседние строки (предыдущий отступ), а не на файл целиком, но увы, это придётся слишком сильно завязаться на API редактора.
Код можно портировать под любой скриптовый язык.

По ходу тестирования нашёл в наших исходниках любителя 3-пробельных отступов. Естественно, его 3-х пробельные отступы перемешанны с 4-х пробельными правками его друзей. Ну и куча обычных банальностей "в файле 3 строчки с табами на 1000 строчек со спейсами".

Как бы мне этот скрипт приткнуть в vim, кто подскажет? Хочется как внешний процесс, так как не на всех хостах новый vim с питоном. Я могу из скрипта возвращать vim-команды, а в vimrc хочется написать что-то вроде eval(get_stdout(~/tab_space_select.py)) update: получилось вот так: http://users.livejournal.com/_winnie/332496.html?thread=4391376#t4391376
Tags: ,

  • 1
Что-то вроде: execute(system("python ~/tab_space_select.py"))

Спасибо!

system сработал, execute или аналога не нашёл. Сделал через временный файл и source. Получилось вот так:


autocmd BufRead *.cpp,*.c,*.h,*.hpp,*.cxx,*.py,*.rb,*.xml,.vimrc call AutoDetectTabsSpaces()
fun AutoDetectTabsSpaces()
    let output=(system("python ~/bin/tab_space_select.py --vim-settings " . @% . " > ~/.tab_space_autodetect_tmp.vim"))
    source ~/.tab_space_autodetect_tmp.vim
endfun

  • 1