Comments 28
Да уж… Vim был бы отличной операционной системой, если бы в нем был текстовый редактор
+3
Путаете с емаксом.
+35
Ну, судя по таким постам, Вим скоро его догонит.
-3
Не раньше, чем кто‐то научит его работать с несколькими нитями и получит нормальное API для различных вещей. Что будет очень и очень нескоро.
Сейчас его при некоторой удаче можно уронить стандартной функциональностью: изменением размера окна (gvim, не vim) и клиент‐серверным взаимодействием. Как это нормально исправить непонятно: слишком много глобальных переменных.
Сейчас его при некоторой удаче можно уронить стандартной функциональностью: изменением размера окна (gvim, не vim) и клиент‐серверным взаимодействием. Как это нормально исправить непонятно: слишком много глобальных переменных.
+1
Нити? Последний раз я видел эту терминологию в известном трактате Терренса Чана, где он еще сокеты гнёздами называл. Я не имею желания придраться, просто хочется узнать, почему именно нити, а не потоки?
0
Думаю, Терренс Чан всё же называл сокеты sockets, а потоки — threads. А дальше уже на вкус переводчика.
Можно потоки и фибры, а можно — нити и волокна. И в последнем варианте сразу ясно, что из чего состоит.
Можно потоки и фибры, а можно — нити и волокна. И в последнем варианте сразу ясно, что из чего состоит.
0
Термин «нити» обычно используют люди, которым приходится работать одновременно и с нитями и с потоками: потоки это streams, например fstream, stringstream и т.д., а нити это threads.
0
if exists('vim_reddit_module')
finish
endif
Переменная должна быть глобальной — g:vim_reddit_module
Иначе это не страхует от повторной загрузки плагина.
finish
endif
Переменная должна быть глобальной — g:vim_reddit_module
Иначе это не страхует от повторной загрузки плагина.
+1
да, опечатка — благодарю за находку)
0
Ошибки не было — нечего исправлять, см. коммент ниже. Я, кстати, использую для страховки локальные для скрипта переменные (
Кстати, в vim-7.4a можно не трогать sys.path. Только модуль надо класть не в plugin/, а в python2/, python3/ или pythonx/ (для второй, третьей и обеих версий Python соответственно).
s:
): если кому‐то надо отключить конкретное дополнение, то для этого есть менеджеры путей (pathogen) или дополнений (VAM, Vundle, …), а засорять глобальную область видимости тем, что не является абсолютно необходимым я не люблю. Тем более, что отключение загрузки можно легко добавить в мой framework в виде одной глобальной переменной на все дополнения со списком отключённых, а не пачки по одной переменной на дополнение, если кому‐то потребуется.Кстати, в vim-7.4a можно не трогать sys.path. Только модуль надо класть не в plugin/, а в python2/, python3/ или pythonx/ (для второй, третьей и обеих версий Python соответственно).
0
s: использовать точно плохо, т.к. кто-то может по ошибке положить скрипт в два места (в plugins/ и bundle/.../ например)
0
У меня при этом будет куча ошибок и кому‐то придётся удалить скрипт из одного места: framework предполагает регистрацию всех внешних интерфейсов, а также принципиальное неиспользование
При использовании только событий кучи ошибок может и не быть, но необходимо будет хотя бы одно предупреждение о том, что файл с таким именем уже загружен. (Под именем следует полагать часть полного пути файла без runtimepath и .vim и с компонентами пути, разделёнными
function!
и command!
(именно с восклицательными знаками, а не неиспользование вообще). Такое поведение гораздо лучше, чем притворяться, что ошибок нет, а потом узнавать, что дополнение было обновлено в одном месте, а загружается из другого.При использовании только событий кучи ошибок может и не быть, но необходимо будет хотя бы одно предупреждение о том, что файл с таким именем уже загружен. (Под именем следует полагать часть полного пути файла без runtimepath и .vim и с компонентами пути, разделёнными
/
, независимо от используемой ОС. Например, plugin/aurum
.)0
По опыту сидения в issue tracker’е powerline, который может быть установлен (и зачастую устанавливается) в два места: в систему с помощью pip и в .vim/bundle, могу сказать, что замалчивание такой ошибки (которое здесь (в powerline) происходит), приводит к появлению кучи народа именно с проблемой обновлённого только в одном месте powerline. Если вы ожидаете, что ваше дополнение будет положено в два места, ни в коем случае не используйте такой простой guard, по крайней мере, в одиночку. Ни
С
Впрочем, я не видел реальных пользователей с такой проблемой.
s:
, ни g:
. У меня вылезают ошибки, но за счёт frawor — то есть guard уже не используется в одиночку.С
g:
, если вы заботитесь о такой ситуации, надо сохранять expand('<sfile>')
в переменную и проверять соответствие при запуске (то есть, сначала if exists()
, внутри if expand('sfile') isnot# g:…
с сообщением об ошибке).Впрочем, я не видел реальных пользователей с такой проблемой.
0
Она и так глобальная. Локальные для файла переменные начинаются с
vimhelp.appspot.com/eval.txt.html#internal-variables
s:
. И страхуют от загрузки файла, поскольку эта область видимости не очищается. Без префикса переменные локальны только внутри функции, а finish
внутри функции не работает.There are several name spaces for variables. Which one is to be used is
specified by what is prepended:
(nothing) In a function: local to a function; otherwise: global
vimhelp.appspot.com/eval.txt.html#internal-variables
+2
«Vim пишет код за Вас…» — это действительно так? как с ним работать?
в остальном статья осталась непонятной. что же делает ваш плагин? зачем он нужен?
в остальном статья осталась непонятной. что же делает ваш плагин? зачем он нужен?
+8
Возможно, статья получилась немного сумубрной, но в ней описано все, что я хотел сказать. Плагин в данном случае не есть самоцель — через него я просто демонстрирую (и разбираюсь сам), как реализовать в vim нужную фичу на python.
Если же вам непонятно в буквальном смысле, что делает этот плагин — он отображает посты из reddit на странице редактора. Это маленькая приятность, которую я давно хотел для себя сделать. Собственно, поэтому он и нужен — в первую очередь, мне)
Если же вам непонятно в буквальном смысле, что делает этот плагин — он отображает посты из reddit на странице редактора. Это маленькая приятность, которую я давно хотел для себя сделать. Собственно, поэтому он и нужен — в первую очередь, мне)
-3
Спасибо, что вы выкладываете в свободный доступ все, что вам удалось реализовать и рассказываете об этом сообществу.
Сочтите дальнейшее как конструктивную критику и желание получить качественно поданный материал.
1.Вместо кричащих заголовков «Vim пишет код за Вас…» читателю/пользователю было бы интереснее узнать, что же реально делает ваш плагин.
2.Вместо картинки из мультфильма стоило бы скриншотами показать, как было и как стало. Или, что лучше, сделать видео на ютьюбе.
3.Установка и мелочи — под кат. (Не всем же это надо, и не все будут это устанавливать. Пожалейте чужое время)
4.Поменьше метафор и аллегорий. Приятнее читать, когда все просто и ясно. Мы же не художественную литературу читаем.
Спасибо.
Сочтите дальнейшее как конструктивную критику и желание получить качественно поданный материал.
1.Вместо кричащих заголовков «Vim пишет код за Вас…» читателю/пользователю было бы интереснее узнать, что же реально делает ваш плагин.
2.Вместо картинки из мультфильма стоило бы скриншотами показать, как было и как стало. Или, что лучше, сделать видео на ютьюбе.
3.Установка и мелочи — под кат. (Не всем же это надо, и не все будут это устанавливать. Пожалейте чужое время)
4.Поменьше метафор и аллегорий. Приятнее читать, когда все просто и ясно. Мы же не художественную литературу читаем.
Спасибо.
+5
>"(подобрать соответсвующее сравнение)"
Штопор?
Штопор?
0
А я наивный… думал что тут реально что-то крутое будет, что перевернет мое представление о текстовом редакторе и покажет как он за меня пишет нужный мне код. Эх
+5
Кстати, если я не ошибаюсь, у вас каждый раз при вызове
И ещё: я не вижу, где вы создаёте новый буфер.
Вообще, если требуется показать какие‐либо данные я всегда использую не команду, а событие
А всю подсветку правильно было бы убрать в syntax/reddit.vim и использовать
:Reddit
в sys.path
добавляется путь. Зачем?И ещё: я не вижу, где вы создаёте новый буфер.
Вообще, если требуется показать какие‐либо данные я всегда использую не команду, а событие
BufReadCmd
и псевдо‐протокол (к примеру, augroup Reddit
autocmd! BufReadCmd reddit:// :call Reddit()
augroup END
) + ещё, возможно, FileReadCmd: на случай, если хочется использовать :read reddit://
. Теоретически это даст возможность восстановления таких буферов при загрузке сессий. Правда, я не использую последние.А всю подсветку правильно было бы убрать в syntax/reddit.vim и использовать
set ft=reddit
. Не надо писать велосипеды для обработки выключенного синтаксиса. И не надо бояться множества мелких файлов.0
Кстати, если я не ошибаюсь, у вас каждый раз при вызове :Reddit в sys.path добавляется путь. Зачем?
Это недосмотр — конечно, надо добавлять только при запуске плагина.
И ещё: я не вижу, где вы создаёте новый буфер.
Я использую текущий буфер — просто очищаю его и заполняю заново. Возможно это не самый лучший путь, скорее это — первое, что пришло в голову и было реализовано.
А всю подсветку правильно было бы убрать в syntax/reddit.vim и использовать set ft=reddit. Не надо писать велосипеды для обработки выключенного синтаксиса. И не надо бояться множества мелких файлов.
Согласен. Судя по всему, мне придется внести еще кучу мелких и не очень исправлений, т.к. в создании плагинов к Vim я очевидный новичок. Благодарю за замечания — они чрезвычайно полезны для меня)
0
Я использую текущий буфер — просто очищаю его и заполняю заново. Возможно это не самый лучший путь, скорее это — первое, что пришло в голову и было реализовано.Использование текущего буфера — это то, что вы должны делать с BufReadCmd. При использовании команды надо его всё же создавать, иначе область применения команды ограничиться либо командой‐обвязкой, которая его‐таки создаст (и добавит ненужный уровень вложенности), либо запуском через
vim +Reddit
. То есть можно просто взять вашу функцию и мой код с BufReadCmd и оставить так.Кстати: у BufReadCmd есть ещё преимущества: можно взять и написать
tabedit reddit://
и не париться созданием кучи команд на все случаи: когда пользователь захочет видеть посты из reddit в новой вкладке, новом окне сверху/слева/справа/снизу, в текущем окне и т.д.0
Sign up to leave a comment.
Пока Vim пишет код за Вас…