Ага. А если вам по каким‐либо причинам надо использовать vim -u /path/to/.vimrc (например, хотите запустить vim с вашим vimrc на чужой машине или избежать использования системного /etc/vim/vimrc//etc/vimrc (зависит от дистрибутива)), то никакое название файла вам не поможет: с -u Vim запускается в режиме совместимости, если нет -N (про который легко забыть). Так что лучше воспользоваться замечательным принципом Python «явное лучше скрытого» и не говорить о ненужности.
Command-T тоже ищет в буферах. Точнее, он ищет либо там, либо там.
Command-T плох тем, что в issues уже весьма давно лежит патч, позволяющий расширять Command-T (т.е. использовать свою функцию создания списка), но никаких средств расширения нет до сих пор. В CtrlP они есть, причём с неплохим API. Когда мне надо было написать расширение для Command-T пришлось делать так: унаследоваться от главного класса, перед показом списка заменить глобальную переменную на экземпляр наследника, после показа вернуть всё как было. Вероятно, можно было изменить исходный экземпляр (хранится в $command_t), но я категорически не люблю monkey patching.
Command-T имеет часть, написаную на C, прослойку на VimL и большое количество кода на Ruby. CtrlP — полностью VimL, а потому работает медленнее.
Command-T не поддерживает не‐ASCII. Не знаю, как у CtrlP, но со стороны авторов Command-T можно было поддержать Unicode простым проходом по всему списку и созданием привязки для каждого нового найденного там символа.
Вообще, если бы мне не пришлось просмотреть исходный код обоих, я бы, наверное, использовал CtrlP. Но ужас с кучей глобальных переменных, сокращёнными до нельзя именами команд, принудительной установкой в modeline неудобных мне опций и, возможно, чем‐то ещё (смотрел давно) не выглядит как дополнение, которое может быть хорошим.
Лучше тогда возьмите таблицу символов и напишите минус. То, что выше, — называется «дефисоминус» (U+002D — это HYPHEN-MINUS (PDF на unicode.org)), а не минус и не дефис. Или обрамляйте формулы в <code></code>, как обычно делаю я:
4 + 2n + 4(n − 1) = 6n — вариант с минусом. 4 + 2n + 4(n - 1) = 6n — вариант с <code></code>. 4 + 2n + 4(n − 1) = 6n — вариант и с тем, и с другим.
+-−
+−- — сравнение (первым идёт дефисоминус, все соседние чёрточки различаются).
+-− +−- — сравнение для <code></code>.
На habrahabr в комментариях такой шрифт, что дефисоминус и минус на одном уровне, но вот так у меня в textarea: . Для шрифтов, не предназначенных для набора программ, такая разница — самое обычное дело. Но горизонтальная черта в плюсе и в минусе всегда находится на одном уровне + минус всегда имеет ширину цифры (плюса) (конечно, зависит от шрифта, но это общепринятые нормы).
Для бо́льшей совместимости лучше писать next(gen), а не gen.next(). Дело в том, что в Python 3 заметили и устранили нестандартность метода .next: этот метод «магический» (точнее, управляет поведением встроенных возможностей языка) аналогично прочим вроде .__iter__, .__gt__; но при этом в Python 2 он пишется без обрамляющих __. В Python 3 метода next у итераторов нет, вместо него используется __next__. Таким образом,
In [92]: gen = (x for x in range(0, 100*10000))
In [93]: gen.next()
покажет AttributeError в Python 3, а
In [92]: gen = (x for x in range(0, 100*10000))
In [93]: gen.__next__()
— то же самое в Python 2. next(gen) будет работать везде.
Менять настройку encoding где бы то ни было после того, как куда‐либо в память Vim попала хотя бы одна не‐ASCII строка — нельзя. Это написано прямо в справке: второй абзац :h 'encoding'.
Удивительно, что при наличии настроек для кодировки файла, терминала, вывода на печать и внутреннего представления, нет отдельной настройки для кодировки окружения.
И, кстати, не используйте set для установки сложных значений. Есть let:
let &l:makeprg='c:\bin\make.exe $* | c:\bin\iconv\iconv.exe -c -f CP866 -t CP1251'
Тем не менее, говорить о том, что в Python 3 конвертации не произошло, не следует. Если вы говорите, что её не произошло, то это намекает на то, что она могла произойти. Но на самом деле конвертации не произошло, потому что в Python 3 объединили два типа.
Неверно. Смотрите TRANSLATING.md, там есть ссылка на официальную площадку с переводом на launchpad и обещание сделать merge, когда перевод будет завершён. Судя по наличию автора статьи, на которую сослался shpaker, в списке «Contributors to this translation» на launchpad, это именно тот перевод, который обозначен в статье.
Нашёл ошибку: слова с несколькими ASCII апострофами (U+0027, ') превращаются в слова с одним Unicode апострофом (U+2019, ’) и оставшимися неизменёнными ASCII апострофами на месте всех апострофов, кроме первого.
На согласных ударение не ставится. Если больших букв больше одной в начале слова и одной в середине, то правило однозначно неприменимо (почти наверняка это сокращение вроде «МежДелМаш»). Кроме того, вариант с выделением более однозначен: «айфон» люди не пишут. Правда и намного более редок.
Я предлагаю разбить это правило на два: это правило для известного списка слов (слова вида «бо́льш*» я видел записанными в таком виде намного чаще, чем все остальные слова вместе взятые) и для любых слов и оставить включённым по‐умолчанию только первое.
Так я наоборот прошу, чтобы большие буквы в середине заменялись на ударение, а не наоборот, потому что «наоборот», как вы правильно заметили, портит текст.
Есть ещё одно правило, которое хотелось бы видеть: очень часто «бо́льших» пишут как «бОльших» или «больших»/«больших»: т.е. заменяют ударение в слове на большую букву или разного рода выделение (первое чаще).
// В zsh есть аналог try-finally с возможностью проигнорировать ошибки (но без полноценного catch).
Вообще‐то в сообщении, на который вы отвечаете, try-catch приводился в качестве аналогии. Ваш ответ соответствует сообщению, на который вы отвечаете, не более, чем абзац выше соответствует вашему сообщению.
Если бы в качестве аналогии было приведено «это как переходить дорогу, никогда не глядя на светофор», вы бы тоже сказали «Какие светофоры… прогуляйся на улице при чем тут баш?!»?
Так вам и говорят про ситуацию, когда выход из main() не равен нулю.
Не про пустой результат, а про код возврата.
Попробуйте с set -o pipefail сделать (true | cat) && echo True || echo False, а потом замените true на false. В случае с true будет выведено «True», в случае с false — «False», но без set -o pipefail в обоих случаях будет «True». При этом ни true, ни false ничего не пишут в stdout
Никого не волнует, создаёт ли git checkout -b ветки, вызывает для этого git branch или скачивает vim (с +python), python, pygit2 и libgit2 и по этой цепочке делает своё дело. Вызовом git checkout -b создаются ветки? Да. Значит git checkout создаёт ветки.
git status не умеет --name-status. В особенности для произвольных ревизий. Хотя, если подумать, то с разницей в информации и формате в выводе, он и не должен уметь. Просто status в git объединяет hg resolve --list и hg status. В mercurial hg status от diff --name-status ушёл недалеко и то только для текущего дерева (для двух ревизий — фактически полные аналоги).
Обычно у меня одно место куда я делаю push. И другое одно, откуда делаю pull. git — не единственная система, имеющая remotes или аналог. Мне удобно не писать куда я хочу сделать push/pull. С mercurial я не пишу. Что‐то мне подсказывает, что, используй я bazaar, я бы тоже не писал. Почему вообще в git так радикально не любят -o/--option в нескольких ключевых местах? hg push origin --bookmark upstream сразу даёт понятие о том, что и куда вы толкаете. git push origin upstream — нет. Насколько мне известно, mercurial использует только однотипные аргументы без -o/--option: два файла тут встретиться могут, ревизия и файл — никогда.
hg incoming ничего не загружает в репозиторий. Это не git fetch. При этом коммиты можно просмотреть полностью, вплоть до diff’ов. Конечно, в последнем случае они физически загружаются (и ещё раз при hg pull). Но в репозиторий не попадают. Если я сделаю git fetch, то мне придётся думать, как удалить ненужные изменения. А потом ещё придётся самостоятельно делать fast‐forward для нужных. Может здесь и есть команда вроде hg rollback, но я её не знаю.
А про линуксы мне говорить не надо. Я просто ничего не уча установил себе Ubuntu. Именно по этому принципу¹. Потом почти так же² пересел на Gentoo, в процессе правда читая handbook.
Кроме того, как я сказал, замечания не фатальные. За исключение API и hook’ов. А также справки для инопланетян и необходимости знания кишок. Подтянется libgit2, будет гораздо лучше, я и сейчас её начинаю использовать.
Проблемы из третьего предложения (справка и кишки) меня уже слабо волнуют. Но это причина, по которой я не буду советовать git ни одному из новичков. Тем более, что git позволяет новичку отстрелить себе ногу с максимальной эффективностью: удалить всё и у себя, и на том конце. Неизменяемая история после git меня уже слегка раздражает, но 1. над этим работают и 2. это давало уверенность в том, что фатально я ничего не напорчу. (Давало: сейчас такую уверенность даёт опыт работы с обеими системами.)
¹ В Windows по совершенно непонятным причинам через несколько дней после установки начинал тормозить интернет. В Ubuntu он не тормозил. Вторая часть мотивации: linux — это не так как у всех, а потому круто (как несложно догадаться, решение принималось ещё в школе). Ни одного linux‐гуру вокруг не было, только такие же разговоры от других школьников, которые его где‐то видели. «Совершенно непонятные причины» также замечательно характеризуют уровень компьютерного знания.
² Только на этот раз было не «надо», а «интересно». И вторая часть ещё никуда не делась. Ну и проблемы от неопытности я себе тоже создал. Не такие большие, как были в Windows, и не причина перейти на что‐то радикально новое, но тоже не сахар.
Поддерживаю, было бы хорошо. У меня абсолютно все собственные проекты либо на bitbucket, либо на sourceforge (второе — по историческим причинам). На github только форки чужих проектов. Либо вовсе доступ к upstream на запись без собственного форка.
Имелось ввиду большее число наименований команд в меньшее число наименований. Разумеется, при этом абсолютное число команд при трансляции конкретной последовательности возрастает.
2. dd по‐умолчанию считает именно с десятичными приставками. Судя по справке, использовать двоичные приставки пользователь сам может. А сказать программе, чтобы вывод производился не в СИ — нет. Другие утилиты вроде ls выводят по‐умолчанию с двоичными приставками, но могут быть проинструктированы использовать десятичные. Ktorrent использует двоичные, но и пишет явно «КиБ». Как настроить — не знаю. Opera (12) использует двоичные, но пишет «KB». Firefox поступает так же. Chorium не показывает размер в загрузках, так что ничего сказать не могу. rtorrent тоже использует двоичные, но пишет MB.
vim -u /path/to/.vimrc
(например, хотите запустить vim с вашим vimrc на чужой машине или избежать использования системного/etc/vim/vimrc
//etc/vimrc
(зависит от дистрибутива)), то никакое название файла вам не поможет: с-u
Vim запускается в режиме совместимости, если нет-N
(про который легко забыть). Так что лучше воспользоваться замечательным принципом Python «явное лучше скрытого» и не говорить о ненужности.Command-T плох тем, что в issues уже весьма давно лежит патч, позволяющий расширять Command-T (т.е. использовать свою функцию создания списка), но никаких средств расширения нет до сих пор. В CtrlP они есть, причём с неплохим API. Когда мне надо было написать расширение для Command-T пришлось делать так: унаследоваться от главного класса, перед показом списка заменить глобальную переменную на экземпляр наследника, после показа вернуть всё как было. Вероятно, можно было изменить исходный экземпляр (хранится в
$command_t
), но я категорически не люблю monkey patching.Command-T имеет часть, написаную на C, прослойку на VimL и большое количество кода на Ruby. CtrlP — полностью VimL, а потому работает медленнее.
Command-T не поддерживает не‐ASCII. Не знаю, как у CtrlP, но со стороны авторов Command-T можно было поддержать Unicode простым проходом по всему списку и созданием привязки для каждого нового найденного там символа.
Вообще, если бы мне не пришлось просмотреть исходный код обоих, я бы, наверное, использовал CtrlP. Но ужас с кучей глобальных переменных, сокращёнными до нельзя именами команд, принудительной установкой в modeline неудобных мне опций и, возможно, чем‐то ещё (смотрел давно) не выглядит как дополнение, которое может быть хорошим.
Кто‐нибудь мне объяснит, зачем в предпросмотре было делать другой шрифт?
textarea:
Комментарий:
Предпросмотр:
4 + 2n + 4(n − 1) = 6n — вариант с минусом.
4 + 2n + 4(n - 1) = 6n
— вариант с <code></code>.4 + 2n + 4(n − 1) = 6n
— вариант и с тем, и с другим.+-−
+−- — сравнение (первым идёт дефисоминус, все соседние чёрточки различаются).
+-−
+−-
— сравнение для <code></code>.На habrahabr в комментариях такой шрифт, что дефисоминус и минус на одном уровне, но вот так у меня в textarea:
next(gen)
, а неgen.next()
. Дело в том, что в Python 3 заметили и устранили нестандартность метода.next
: этот метод «магический» (точнее, управляет поведением встроенных возможностей языка) аналогично прочим вроде.__iter__
,.__gt__
; но при этом в Python 2 он пишется без обрамляющих__
. В Python 3 методаnext
у итераторов нет, вместо него используется__next__
. Таким образом,покажет AttributeError в Python 3, а
— то же самое в Python 2.
next(gen)
будет работать везде.:h 'encoding'
.Удивительно, что при наличии настроек для кодировки файла, терминала, вывода на печать и внутреннего представления, нет отдельной настройки для кодировки окружения.
И, кстати, не используйте
set
для установки сложных значений. Естьlet
:'
) превращаются в слова с одним Unicode апострофом (U+2019, ’) и оставшимися неизменёнными ASCII апострофами на месте всех апострофов, кроме первого.Я предлагаю разбить это правило на два: это правило для известного списка слов (слова вида «бо́льш*» я видел записанными в таком виде намного чаще, чем все остальные слова вместе взятые) и для любых слов и оставить включённым по‐умолчанию только первое.
Вообще‐то в сообщении, на который вы отвечаете, try-catch приводился в качестве аналогии. Ваш ответ соответствует сообщению, на который вы отвечаете, не более, чем абзац выше соответствует вашему сообщению.
Если бы в качестве аналогии было приведено «это как переходить дорогу, никогда не глядя на светофор», вы бы тоже сказали «Какие светофоры… прогуляйся на улице при чем тут баш?!»?
=(command)
— тоже process substitution, но вместо pipe подставляет временный файл.Не про пустой результат, а про код возврата.
Попробуйте с
set -o pipefail
сделать(true | cat) && echo True || echo False
, а потом заменитеtrue
наfalse
. В случае сtrue
будет выведено «True», в случае сfalse
— «False», но безset -o pipefail
в обоих случаях будет «True». При этом ниtrue
, ниfalse
ничего не пишут в stdoutgit checkout -b
ветки, вызывает для этогоgit branch
или скачивает vim (с +python), python, pygit2 и libgit2 и по этой цепочке делает своё дело. Вызовомgit checkout -b
создаются ветки? Да. Значитgit checkout
создаёт ветки.git status
не умеет--name-status
. В особенности для произвольных ревизий. Хотя, если подумать, то с разницей в информации и формате в выводе, он и не должен уметь. Простоstatus
в git объединяетhg resolve --list
иhg status
. В mercurialhg status
отdiff --name-status
ушёл недалеко и то только для текущего дерева (для двух ревизий — фактически полные аналоги).Обычно у меня одно место куда я делаю push. И другое одно, откуда делаю pull.
git
— не единственная система, имеющая remotes или аналог. Мне удобно не писать куда я хочу сделать push/pull. С mercurial я не пишу. Что‐то мне подсказывает, что, используй я bazaar, я бы тоже не писал. Почему вообще в git так радикально не любят -o/--option в нескольких ключевых местах?hg push origin --bookmark upstream
сразу даёт понятие о том, что и куда вы толкаете.git push origin upstream
— нет. Насколько мне известно, mercurial использует только однотипные аргументы без -o/--option: два файла тут встретиться могут, ревизия и файл — никогда.hg incoming
ничего не загружает в репозиторий. Это неgit fetch
. При этом коммиты можно просмотреть полностью, вплоть до diff’ов. Конечно, в последнем случае они физически загружаются (и ещё раз приhg pull
). Но в репозиторий не попадают. Если я сделаюgit fetch
, то мне придётся думать, как удалить ненужные изменения. А потом ещё придётся самостоятельно делать fast‐forward для нужных. Может здесь и есть команда вродеhg rollback
, но я её не знаю.А про линуксы мне говорить не надо. Я просто ничего не уча установил себе Ubuntu. Именно по этому принципу¹. Потом почти так же² пересел на Gentoo, в процессе правда читая handbook.
Кроме того, как я сказал, замечания не фатальные. За исключение API и hook’ов. А также справки для инопланетян и необходимости знания кишок. Подтянется libgit2, будет гораздо лучше, я и сейчас её начинаю использовать.
Проблемы из третьего предложения (справка и кишки) меня уже слабо волнуют. Но это причина, по которой я не буду советовать
git
ни одному из новичков. Тем более, что git позволяет новичку отстрелить себе ногу с максимальной эффективностью: удалить всё и у себя, и на том конце. Неизменяемая история после git меня уже слегка раздражает, но 1. над этим работают и 2. это давало уверенность в том, что фатально я ничего не напорчу. (Давало: сейчас такую уверенность даёт опыт работы с обеими системами.)¹ В Windows по совершенно непонятным причинам через несколько дней после установки начинал тормозить интернет. В Ubuntu он не тормозил. Вторая часть мотивации: linux — это не так как у всех, а потому круто (как несложно догадаться, решение принималось ещё в школе). Ни одного linux‐гуру вокруг не было, только такие же разговоры от других школьников, которые его где‐то видели. «Совершенно непонятные причины» также замечательно характеризуют уровень компьютерного знания.
² Только на этот раз было не «надо», а «интересно». И вторая часть ещё никуда не делась. Ну и проблемы от неопытности я себе тоже создал. Не такие большие, как были в Windows, и не причина перейти на что‐то радикально новое, но тоже не сахар.
dd
по‐умолчанию считает именно с десятичными приставками. Судя по справке, использовать двоичные приставки пользователь сам может. А сказать программе, чтобы вывод производился не в СИ — нет. Другие утилиты вродеls
выводят по‐умолчанию с двоичными приставками, но могут быть проинструктированы использовать десятичные. Ktorrent использует двоичные, но и пишет явно «КиБ». Как настроить — не знаю. Opera (12) использует двоичные, но пишет «KB». Firefox поступает так же. Chorium не показывает размер в загрузках, так что ничего сказать не могу. rtorrent тоже использует двоичные, но пишет MB.