Base64 в NeoVim и Vim

На данный момент я использую Astronvim в качестве конфигурации NeoVim. По умолчанию, настройки клавиш для него находятся в файле ~/.config/nvim/lua/user/mappings.lua.

Следующий фрагмент добавляет настройки клавиш для кодирования и декодирования строк в формате base64:

1
2
3
4
5
6
7
8
9
return {
  ...
  v = { -- Visual mode mappings
    ...
    ["<leader>64e"] = { "c<c-r>=system('base64 --wrap=0',          @\")<cr><esc>", desc = "Base64 encode" },
    ["<leader>64d"] = { "c<c-r>=system('base64 --wrap=0 --decode', @\")<cr><esc>", desc = "Base64 decode" },
  },
  ...
}

В прошлом я использовал обычный NeoVim и Vim, поэтому у меня были следующие строки в ~/.config/nvim/init.vim:

1
2
vnoremap <leader>64e c<c-r>=system('base64 --wrap=0',          @")<cr><esc>
vnoremap <leader>64d c<c-r>=system('base64 --wrap=0 --decode', @")<cr><esc>

Читать дальше

Mgitstatus

Довольно часто я работаю над несколькими проектами одновременно и иногда бывает сложно держать в голове состояние гит репозитория каждого из них. Непонятно, где я не закоммитил изменения или какой из проектов нужно обновить из апстрима.

Можно написать небольшой однострочник на баше, который перебирает директории проектов и показывает статус каждого из них:

1
2
3
4
for project in development/projects/*;
do
    sh -c "cd $project; git status"
done

Это не совсем однострочник, но только для читаемости. Этот код можно оформить в виде функции или скрипта. Вот пример его исполнения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        public/

nothing added to commit but untracked files present (use "git add" to track)
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
fatal: not a git repository (or any of the parent directories): .git

Лично мне сложно это воспринимать — слишком много лишней информации, не хватает цветов, и самое главное — не видно, о каком проекте идёт речь.

Этот код можно значительно улучшить. Или воспользоваться готовым решением, коих несколько, например: mgitstatus, этот скрипт или gr (который, в действительности, имеет гораздо больше возможностей, чем простое отображение статуса). Сейчас я пользуюсь первым. Вот пример его работы:

Выглядит гораздо лучше, не так ли?

Читать дальше

Pipfile.lock → requirements.txt

Коротко

Обновление

Как указали мне в комментариях к англоязычной версии этой заметки, в релизе v2022.4.8 добавили команду, которая это делает:

1
2
pipenv requirements > requirements.txt
pipenv requirements --dev-only > requirements-dev.txt

Документация для новой команды тут.

Старый вариант

Для requirements.txt:

1
2
3
4
jq -r '.default
        | to_entries[]
        | .key + .value.version' \
    Pipfile.lock > requirements.txt

Для requirements-dev.txt:

1
2
3
4
jq -r '.develop
        | to_entries[]
        | .key + .value.version' \
    Pipfile.lock > requirements-dev.txt

Читать дальше

Имя докер машины в терминале

Некоторое время назад я начал использовать несколько удалённых машин для докера (с помощью docker-machine). И я подумал, что было бы неплохо видеть, к какой из машин я сейчас подключен. Так как я использую Powerline, проще всего было бы подключить сегмент с именем машины. Однако, ничего готового я не нашёл, поэтому пришлось сделать свой собственный.

Читать дальше