Предаване на упражнения

Тук ще намерите информация за това как да си пускате решения на упражненията и какво и как да споделяте с колеги.

Инсталация и настройки

Първата стъпка е да изтеглите command-line приложението и да го сложите някъде в PATH, за да може да го викате. Ето едно видео с инструкции за Windows, но би трябвало да сработи по същия начин за Linux и Mac: https://youtu.be/aIyZDxdiY74.

Ето линкове, откъдето да си изтеглите приложението (най-новата версия, 0.2.0):

Или може да отидете в "releases" в гитхъб и да видите всички линкове с информация за архитектури и т.н.: https://github.com/AndrewRadev/vim-fmi-cli/releases. Разбира се, може и да си го компилирате, ако имате Rust toolchain.

Може да проверите, че приложението е на линия като отворите една конзола и извикате vim-fmi:

% vim-fmi
Клиент за курса по Vim във ФМИ

Usage: vim-fmi 

Commands:
  setup    Инициализира потребителя, който ще праща решения
  put      Стартира упражнение с подадения идентификатор
  free     Стартира свободно упражнение с подадения идентификатор
  vim      Стартира Vim-а, който програмата може да намери. За тестване
  version  Показва текущата версия на клиента
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help

За да може да предавате задачи, първата стъпка е "setup".

  • Отивате тук и си създавате потребителски token: https://vim-fmi.bg/user_tokens.
  • Копирате токена и извиквате vim-fmi setup <token>.
  • Би трябвало да получите съобщение, че сте активирани на този компютър (ако нещо не сработи, пишете).
  • Ако имате няколко компютъра или dual-boot-вате или работите на компютър във ФМИ, просто си правите нов token, давате му подходящо име и го сетъпвате.

На мак, приложението ще се опита да стартира MacVim, под линукс и windows, ще пробва GVim. Ако сте толкова хардкор unix-ари, че нямате графичен environment, ще стартира конзолен Vim. Ако искате "на ръка" да му кажете кой Vim да използва, сложете environment променлива VIMFMI_EXECUTABLE, която да съдържа конкретната команда, която да използва.

Предаване на задачите

Първата задача ще е активна цяла седмица, колкото да имате време да си сетъпнете клиента и да му намерите бъговете. Изключително важно е да не чакате до последния момент, защото като мине обещания срок, пускам ежедневни упражнения, и ако нямате работещ начин да ги предавате, просто няма да получите точки от тях.

  • Отивате в секция "упражнения" и намирате това, което не сте направили: https://vim-fmi.bg/tasks.
  • Цъкате на "Предай решение", копирате токена и извиквате vim-fmi put <token>.
  • Променяте съдържанието на файла така че да изглежда както искания output и излизате от Vim. Би трябвало вече задачата да е маркирана като решена.

Ако има каквито и да е проблеми, пишете.

  • Позволено е да споделяте в #exercises канала как сте решили някое упражнение или да питате как по-ефективно да го решите. Целта е всички физически да използвате Vim, не да се мъчите да измислите нещо хитро. Въздържайте се обаче да казвате конкретни клавиши -- "влез във visual block mode" вместо "натисни <c-v>". Все пак трябва хората да знаят как се влиза във visual block mode (примерно). Изключвам супер-мега базови неща като <esc> примерно. Няма да наказвам ако отървете някой клавиш, но може да редактирам съобщения.
  • Забранено е някой друг да ви прави решенията. Задачите няма да са особено трудни, просто си ги направете. Ако попадна на някой да праща токени на някого да му решава задачите, ще наказвам.
  • Няма значение колко бързо или ефективно решите упражнението, само го решете. Има в списъка с решения брой клавиши и време за решаване, но това е за хората, които им е интересно да търсят кратки или бързи решения. Няма да ви даде повече точки или да повлияе на крайната оценка.
  • По подразбиране, използвате базова конфигурация. Може да я видите в github. Възможно е да си конфигурирате собствени настройки, с някои ограничения

Персонализиране на vimrc-то

Възможно е да си сложите собствени настройки, тук: Vimrc. Имайте предвид обаче някои важни неща:

  • Вашето Vimrc се записва след съдържанието на вграденото, линкнато по-горе. Целта е някои важни базови неща да бъдат установени, примерно runtimepath се ограничава само до каквото идва от инсталацията на Vim.
  • Забранено е да използвате плъгини от интернет. На теория, не би трябвало да можете да ги "инсталирате", защото Vim старира в restricted mode, но ако намерите някакъв workaround, просто недейте. Ако намеря, че сте се изхитрили някак, ще занулявам решения. Просто си пишете настройки, мапинги, команди за себе си.
  • В тоя ред на мисли, забранено е да модифицирате runtimepath, packpath, да викате файлове от файловата система със source и всякакви такива неща. Окей е да използвате вградените инструменти от инсталацията на Vim (примерно :packadd matchit).
  • Няма да можете да редактирате vimrc-то си ако има отворено упражнение, на което не сте предали решение. Целта е да се избегне ситуация, в която просто си правите някаква команда или мапинг, която решава задачата "автоматично". Пишете си преизползваеми инструменти, не конкретни такива. След като решите едно упражнение, свободни сте да си модифицирате конфигурацията докато не излезе следващото.
  • Винаги можете да пуснете решението със vim-fmi put --novimrc <token>. В случай че по каквато и да е причина vimrc-то, което сте въвели, не работи и не можете да го редактирате, този флаг ще накара клиента да използва вградената конфигурация.
Целта на vimrc-то в сайта не е да използвате пълната си лична конфигурация, целта е просто упражненията да ви бъдат малко по-удобни. Копирайте от конфигурацията си, ако искате, но сте ограничени до вградените неща и до каквото напишете сами за себе си. Предполагам, че е възможно просто да копи-пейстнете сорса на някой плъгин във файла, но... наистина ли ви трябва толкова много който и да е плъгин? За работата, за която отделяте по няколко минути на ден? Ако видя, че се прекалява с такива неща, ще сложа някакъв limit на броя символи на vimrc-то.

Всички упражнения се пазят, заедно с контекста в който са били пуснати (vimrc, etc), и по време на изпита ще ги имам под ръка за търсене на странности. Ако правите някое от забранените неща по-горе и не съм ви хванал дотогава, вероятно на изпита ще мога да ви обърна внимание. Убеден съм, че за някои от вас е забавно да търсят workaround-и на правилата и правят трикове, но за мен това само създава повече работа, така че може би просто недейте.