Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Улучшаем себе DX при помощи консольных инструментов

Улучшаем себе DX при помощи консольных инструментов

Федор Борщёв (Школа Сильных Программистов, руководитель). Улучшаем себе DX при помощи консольных инструментов

Многие программисты до сих пор считают, что терминал — это инструмент бородатых админов из 80-х годов. На самом деле это не так — каждый год в сообществе появляются новые консольные инструменты, которые улучшают ежедневную рутину программиста: упрощают работу с гитхабом, поиск файлов, переход между проектами. Есть инструменты с говорящими названиями, к примеру tldr ускоряет чтение документации, а fuck — исправляет ошибку в последней введённой команде.

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

Выступление: https://moscowpython.ru/meetup/79/dx-with-console/

MoscowPython: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru

Moscow Python Meetup

February 04, 2023
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Как улучшить DX
    с помощью консольных инструментов
    Фёдор Борщёв

    View full-size slide

  2. case `cat animal.txt` in
    kitten)
    echo meow!
    ;;
    doge)
    echo bark!
    ;;
    *)
    echo Кря.
    ;;
    esac
    BASH

    View full-size slide

  3. case `cat animal.txt` in
    kitten)
    echo meow!
    ;;
    doge)
    echo bark!
    ;;
    *)
    echo Кря.
    ;;
    esac
    switch (cat animal.txt)
    case kitten
    echo meow!
    case doge
    echo bark!
    case '*'
    echo Кря.
    end
    FISH
    BASH

    View full-size slide

  4. Ctrl-R
    (reverse-i-search)`':
    BASH

    View full-size slide

  5. Ctrl-R
    (reverse-i-search)`pg':
    pg_restore --host localhost -U postgres -d postgres
    BASH

    View full-size slide

  6. Ctrl-R
    (reverse-i-search)`':
    BASH

    View full-size slide

  7. FISH
    Ctrl-R
    (reverse-i-search)`pg':
    pg_restore --host localhost -U postgres -d postgres
    pg_restore --host localhost -U postgres -d postgres
    app-postgres_productio…
    BASH

    View full-size slide

  8. FISH
    Как понять, что команда не сработает
    $ ls- lah
    BASH

    View full-size slide

  9. $ ls- lah
    bash: ls-: command not found
    BASH
    Как понять, что команда не сработает
    FISH

    View full-size slide

  10. $ ls- lah
    bash: ls-: command not found
    $ fuck
    BASH
    Как понять, что команда не сработает
    FISH

    View full-size slide

  11. $ ls- lah
    bash: ls-: command not found
    $ ls- lah
    Как понять, что команда не сработает
    BASH FISH

    View full-size slide

  12. $ ls- lah
    bash: ls-: command not found
    $ ls -lah
    Как понять, что команда не сработает
    BASH FISH

    View full-size slide

  13. Дизайн

    View full-size slide

  14. Плохой дизайн

    View full-size slide

  15. Хороший дизайн

    View full-size slide

  16. Очень хороший дизайн

    View full-size slide

  17. Пользовательский сценарий
    ls в Mac
    $ ls

    View full-size slide

  18. Пользовательский сценарий
    ls в Mac
    $ ls --help
    ls: unrecognized option `--help'
    usage: ls [-@ABCFGHILOPRSTUWabcdefghi
    klmnopqrstuvwxy1%,] [--color=when] [-D format]
    [file ...]

    View full-size slide

  19. Пользовательский сценарий
    ls в Linux
    $ ls --help

    View full-size slide

  20. Пользовательский сценарий
    exa
    $ exa --help

    View full-size slide

  21. Permissions Size User Date Modified Name
    drwx------ - f213 21 Apr 21:50 .ansible
    drwx------ - f213 5 Jun 16:52 .cache
    .rw-r--r-- 0 f213 23 May 2020 .cloud-locale.skip
    drwx------ - f213 26 Jun 13:17 .config
    lrwxrwxrwx 35 f213 17 Apr 11:03 .cookiecutterrc ->
    /home/f213/.dotfiles/cookiecutterrc
    Пользовательский сценарий
    exa

    View full-size slide

  22. drwxrwxr-x - f213 17 Apr 11:03 .
    drwxrwxr-x - f213 17 Apr 11:03 ├── after
    drwxrwxr-x - f213 17 Apr 11:03 │ └── ftplugin
    .rw-rw-r-- 72 f213 17 Apr 11:03 │ ├── javascript.vim
    .rw-rw-r-- 35 f213 17 Apr 11:03 │ ├── make.vim
    .rw-rw-r-- 411 f213 17 Apr 11:03 │ ├── python.vim
    .rw-rw-r-- 71 f213 17 Apr 11:03 │ ├── vue.vim
    .rw-rw-r-- 55 f213 17 Apr 11:03 │ └── yaml.vim
    .rw-rw-r-- 838 f213 17 Apr 11:03 └── init.vim
    Пользовательский сценарий
    exa -T

    View full-size slide

  23. $ alias ls=exa
    Пользовательский сценарий
    exa -T
    drwxrwxr-x - f213 17 Apr 11:03 .
    drwxrwxr-x - f213 17 Apr 11:03 ├── after
    drwxrwxr-x - f213 17 Apr 11:03 │ └── ftplugin
    .rw-rw-r-- 72 f213 17 Apr 11:03 │ ├── javascript.vim
    .rw-rw-r-- 35 f213 17 Apr 11:03 │ ├── make.vim
    .rw-rw-r-- 411 f213 17 Apr 11:03 │ ├── python.vim
    .rw-rw-r-- 71 f213 17 Apr 11:03 │ ├── vue.vim
    .rw-rw-r-- 55 f213 17 Apr 11:03 │ └── yaml.vim
    .rw-rw-r-- 838 f213 17 Apr 11:03 └── init.vim

    View full-size slide

  24. Даже самые базовые сценарии болеют
    $ grep animal

    View full-size slide

  25. Даже самые базовые сценарии болеют
    $ grep animal

    View full-size slide

  26. Даже самые базовые сценарии болеют
    $ grep animal ./

    View full-size slide

  27. Даже самые базовые сценарии болеют
    $ grep animal ./
    grep: ./: Is a directory

    View full-size slide

  28. Даже самые базовые сценарии болеют
    $ grep -r animal ./

    View full-size slide

  29. Даже самые базовые сценарии болеют
    $ grep -r animal ./
    ./1.first_file:1:switch read animal.txt
    ./1.second_file:1:let animal=`cat animal.txt`
    ./1.second_file:3:echo ${animal}
    ./1.second_file:4:case `cat animal.txt` in

    View full-size slide

  30. Даже самые базовые сценарии болеют
    $ rg animal
    1.bash_file
    1:let animal=`cat animal.txt`
    3:echo ${animal}
    4:case `cat animal.txt` in
    1.fish_file
    1:switch read animal.txt

    View full-size slide

  31. Даже самые базовые сценарии болеют
    $ alias grep=rg
    1.bash_file
    1:let animal=`cat animal.txt`
    3:echo ${animal}
    4:case `cat animal.txt` in
    1.fish_file
    1:switch read animal.txt

    View full-size slide

  32. Взять ПР, чтобы поправить опечатки

    View full-size slide

  33. Взять ПР, чтобы поправить опечатки

    View full-size slide

  34. Взять ПР, чтобы поправить опечатки
    $ git checkout feature/invoice

    View full-size slide

  35. Взять ПР, чтобы поправить опечатки
    $ git checkout feature/invoice
    error: pathspec 'feature/invoice' did not
    match any file(s) known to git

    View full-size slide

  36. Взять ПР, чтобы поправить опечатки
    $ git fetch; git checkout feature/invoice
    Switched to branch ‘feature/ivocing’
    Your branch is up to date with
    'origin/feature/invoicing'.

    View full-size slide

  37. Взять ПР, чтобы поправить опечатки
    $ git fetch
    fetch checkout
    $ git checkout feature/invoice
    Switched to branch ‘feature/ivocing’
    Your branch is up to date with
    'origin/feature/invoicing'.
    открыть github скопировать
    название веточки
    4 действия

    View full-size slide

  38. Взять ПР, чтобы поправить опечатки
    1 действие
    $ gh pr checkout 3
    Switched to branch ‘feature/invoicing’
    Your branch is up to date with
    'origin/feature/invoicing'.
    Already up to date.

    View full-size slide

  39. Почти для любого сценария есть удобный инструмент
    sd вместо sed
    Посмотреть файл:
    Найти:
    Массовая замена:
    bat вместо cat
    fd вместо find

    View full-size slide

  40. Редактирование текста
    IDE Vim

    View full-size slide

  41. IDE
    интеграция с языком

    View full-size slide

  42. IDE
    интеграция с языком
    интерфейс

    View full-size slide

  43. IDE
    интеграция с языком
    интерфейс

    View full-size slide

  44. IDE
    интеграция с языком
    интерфейс
    скорость

    View full-size slide

  45. IDE
    интеграция с языком
    интерфейс
    скорость
    Vim
    скорость

    View full-size slide

  46. Vim
    скорость
    интерфейс

    View full-size slide

  47. Vim
    скорость
    интерфейс
    fun! Edit_ft_conf(name)
    " we may not do this with a loaded file, since this won't trigger the
    " configuration file loading as desired.
    " try calling with 'call Edit_ft_conf("nonexistingfile.")' if this
    " gives you troubles
    if bufexists(a:name) && bufloaded(a:name)
    echo "!Attention: buffer for " . a:name . " is loaded, unload first."
    return
    endif
    let safereg = @u
    redir @u " redirect command output to register @u
    exec "silent 2verbose split " . a:name
    redir END
    let pos = 0
    let regexp = 'sourcing "[^"]\+"'
    while match(@u,regexp,pos) >= 0
    let file = matchstr(@u,regexp,pos)
    let pos = matchend (@u,regexp,pos)
    let file = strpart(file,10,strlen(file)-11)
    exec "silent below split " . file
    endwhile
    let @u = safereg
    endfun
    язык из 70-х

    View full-size slide

  48. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х

    View full-size slide

  49. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    IDE
    интеграция с языком
    интерфейс
    скорость

    View full-size slide

  50. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    IDE
    интеграция с языком
    интерфейс
    скорость
    vscode

    View full-size slide

  51. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    IDE
    интеграция с языком
    интерфейс
    скорость
    vscode
    интерфейс
    скорость
    интеграция с языком

    View full-size slide

  52. vscode
    интерфейс
    скорость
    интеграция с языком

    View full-size slide

  53. vscode ?
    интерфейс
    скорость
    интеграция с языком

    View full-size slide

  54. vscode ?
    интерфейс
    скорость
    интеграция с языком

    View full-size slide

  55. vscode ?
    интерфейс
    скорость
    интеграция с языком

    View full-size slide

  56. vscode ?
    интерфейс
    скорость
    интеграция с языком
    Vim ?
    скорость
    интерфейс
    порог вхождения
    язык из 70-х

    View full-size slide

  57. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х

    View full-size slide

  58. vscode ?
    интерфейс
    скорость
    интеграция с языком
    Vim ?
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    Neovim
    скорость
    интерфейс
    интеграция с языком

    View full-size slide

  59. Neovim
    скорость
    интерфейс
    интеграция с языком
    neoclide/coc.nvim

    View full-size slide

  60. Neovim
    скорость
    интерфейс
    интеграция с языком
    порог вхождения

    View full-size slide

  61. IDE
    интеграция с языком
    интерфейс
    скорость

    View full-size slide

  62. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    IDE
    интеграция с языком
    интерфейс
    скорость

    View full-size slide

  63. Vim
    скорость
    интерфейс
    порог вхождения
    язык из 70-х
    IDE
    интеграция с языком
    интерфейс
    скорость
    Neovim
    скорость
    интерфейс
    интеграция с языком
    порог вхождения

    View full-size slide

  64. Пройди vimtutor,
    поставь vim-плагин
    к текущему IDE

    View full-size slide

  65. Пробуй neovim
    Пройди vimtutor,
    поставь vim-плагин
    к текущему IDE

    View full-size slide

  66. Фёдор Борщёв

    View full-size slide