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
PRO

February 04, 2023
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

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

    View Slide

  2. ;;
    esac

    View Slide

  3. ;;
    esac

    View Slide

  4. ;;
    esac

    View Slide

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

    View Slide

  6. 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 Slide

  7. BASH
    Ctrl-R

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. Дизайн

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 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 Slide

  26. 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 Slide

  27. $ 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. Даже самые базовые сценарии болеют
    $ 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 Slide

  34. Даже самые базовые сценарии болеют
    $ 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 Slide

  35. Даже самые базовые сценарии болеют
    $ 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  41. Взять ПР, чтобы поправить опечатки
    $ 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 Slide

  42. Взять ПР, чтобы поправить опечатки
    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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  51. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide