Делимся своими хаками/алиасами/прогами для консоли

 Публичный пост

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

Проги:
nvtop -- как htop, только для видеокарт. Висит у меня в отдельном окне tmux вместе с htop. Посматриваю, если гружу карточки, чтобы вовремя уловить проблемы.

Настройки и надстройки:
vim:

" set 'updatetime' to 3 minutes when in insert mode
au InsertEnter * let updaterestore = &updatetime | set updatetime=300000
au InsertLeave * let &updatetime = updaterestore

" automatically leave insert mode after 'updatetime' milliseconds of inaction
au CursorHoldI * stopinsert

через 5 минут бездействия выходит из инпут режима. Бывает оставлю редактор на середине строки, а когд прийду начинаю с нажатия i/a.

еще vim:

:command CurDiff w !diff % -

function! s:DiffWithSaved()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
com! DiffSaved call s:DiffWithSaved()
nnoremap <F4> :DiffSaved<Enter>

два разных способа посмотреть дифф между сохраненной версией и тем, что сейчас наредактировано. Один просто запускает дифф, второй запускает две панели.

Функции для консоли:

  tabview () {
    cat $1 | sed 's/,/ ,/g' | column -t -s, | less -S
}

Регулярно смотрю csv таблички в консоли таким образом.

ftext () {
    grep -iIHrn --color=always "$1" . | less -R -r
}

Просто готовая обертка параметров для стандартного грепа, чтобы красиво грепать в своих же файлах.

Как водится, мои конфиги лежат на гите.

52 комментария 👇
alias ды=ls
alias мшь=vim

Я серьёзно

  Развернуть 1 комментарий

@alcotaran, попробуйте fuck )

  Развернуть 1 комментарий

@kuntashov,

alias агсл=fuck
alias бля=fuck
  Развернуть 1 комментарий

@kuntashov, интересно а можно как-нибудь вызывать fuck автоматически при получении command not found ?

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий
  Развернуть 1 комментарий

Вчера только узнал про pbcopy на маках.

cat result.txt | pbcopy

Скопирует содержимое result.txt в буфер

  Развернуть 1 комментарий

@dmrlx, и заодно pbpaste, чтобы вставлять в стандартный ввод

  Развернуть 1 комментарий

@emocoder, и вот только сегодня узнал про pbpaste ))) Спасибо.

  Развернуть 1 комментарий

@dmrlx, круто!
Еще бы это делать сквозь ssh-туннель >_<

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

  Развернуть 1 комментарий

@dmrlx, на линуксе для аналогичных целей можно использовать xclip или xsel (есть параметры для выбора в/из буфера, и собственно буфера - selection/clipboard)

  Развернуть 1 комментарий

tldr
https://github.com/tldr-pages/tldr

Каждый раз когда я пытаюсь вспомнить как же там добавить боди в курл или какой там синтаксис у git branch...

  Развернуть 1 комментарий

@slonoed, на чужих машинах еще выручает https://cheat.sh/, который можно использовать вот так: curl cheat.sh/tar

  Развернуть 1 комментарий

@KonstantinMikhailov, огонь!

  Развернуть 1 комментарий

@slonoed, забавно, что подход tldr работает и с самим tldr:

  1. tldr git — эээ, это что, весь хелп по гиту?
  2. sudo apt purge tldr^W^W^W^W — дадим мальчику ещё один шанс
  3. tldr tldr — ах вот оно что...
  4. tldr git-branch — ... :)
  Развернуть 1 комментарий

alias 2ip='curl ifconfig.co'
//покажет твой внешний айпишник

  Развернуть 1 комментарий

Мой единственный лайфхак - поменьше пользоваться консолью

  Развернуть 1 комментарий
LexsZero Embedded Software Engineer 13 января 2021

Алиасы и прочую ботву можно посмотреть в .zshrc, все перечислять нет смысла, но без алиасов позволяющих вместо всяких неудобных пальцеломающих | grep -i писать Gi я жить не могу.
Еще у меня есть специальный костыль для удобства работы с кучей проектов/репозиториев/компонент - просто делаешь init_project foo/bar первой командой после спавна нового шелла - и он переходит в нужную директорию, соурсит всякие энвайроменты (из директории проекта и выше) и выставляет компактный промпт и заголовок окна чтоб время проведенное там автоматически трекалось трекалкой времени (сейчас почти не использую, а когда фрилансил с отчетами по часам затраченным на разные вещи - было очень актуально).

Из тулзов люблю:

  • Вимообразный файловый менеджер ranger, даже прикрутил его к шеллу чтоб юзать вместо cd иногда.
  • Для поиска ag - The Silver Searcher - есть еще всякие ripgrep и иже с ними, они все плюс-минус похожи друг на друга.
  • Для фаззи-поиска fzf - вместо того что по-дефолту по Ctrl-R
  • Для гита - tig

Плагины для вима я перечислять, пожалуй, не буду, отмечу лишь единственный работающий комплишн и удобную прыгалку по буферам

Наверное, из вышенаписанного можно догадаться, что живу я преимущественно в консоли (20+ терминалок на 10 воркспейсах - норма) и при этом не знаю и не юзаю наверное и 20% фич всех тулзов что я когда-либо прикручивал, зато то что использую - сидит где-то на уровне спинного мозга.

  Развернуть 1 комментарий

@LexsZero, огонь!

А в чем киллерфича coc.nvim? Или вы работаете в каких-то особых условиях? Просто для питона их тысячи, и я как-то не нащупал серьезной разницы.

  Развернуть 1 комментарий

@MartolodSlaaf, я работаю в основном с сишкой/крестами, и это единственный комплишн который у меня вменяемо заработал с минимумом телодвижений, все что пробовал до этого (neocomplete, clang_complete, YCM, etc) я так и не смог довести до юзабельного состояния, постоянно что-то отваливалось или сыпало ошибками. Ну и хорошо когда один комплит-плагин нормально поддерживает все языки (частенько также ковыряю баш и питон, изредка JS).

  Развернуть 1 комментарий

@LexsZero, ага, понял, make sense. Просто думал, нужно ли мне все таки и его попробовать =)

  Развернуть 1 комментарий

@LexsZero, а почему не neovim? у него встроеннная поддержка lsp и treesitter - работает отлично

  Развернуть 1 комментарий

Вместо ranger попробуйте lf, это клон, там чуток поменьше функций, но он быстрее в разы.

  Развернуть 1 комментарий

@omnster, В разы? У меня нет проблем со скоростью ранджера, впервые вообще слышу. Запускается разве что не мгновенно, а ~300мс, но это похрен вообще. Алсо в lf кажется нет фич ради которых мне вообще нужен файлменеджер (табы чтоб удобно рассортировывать бардак путем dd Alt-2 pp)

  Развернуть 1 комментарий

@LexsZero, Да, я именно время запуска имел в виду.

  Развернуть 1 комментарий

The Fuck - https://github.com/nvbn/thefuck
Если предыдущая команда завершилась с ошибкой (забыли судо или опечатались в команде для гита, например), fuck исправляет предыдущую команду и иногда предлагает несколько вариантов решения.

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...```
  Развернуть 1 комментарий
Михаил Гусаров Инженегр-погромист 13 января 2021

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

@dottedmag, слитие истории огонь, да! Особенно, когда сидишь в тмуксе просто не вылезая.

А колордифф надо попробовать, как-то раньше не заморачивался и смотрел в обычный.

  Развернуть 1 комментарий
Андрей Серов пишу всякое, иногда автоматизирую препресс 13 января 2021

Вот эта штука.
Пишешь, например, curl, нажимаешь кнопку вверх и бегаешь по хистори только курлов. Удобно!

  Развернуть 1 комментарий

@zmej, спасибо, понял что мне этого не хватало!

  Развернуть 1 комментарий
Сергей Хабаров Проджект на все руки 15 января 2021
  Развернуть 1 комментарий

Чтобы писать код на локальной машине и быстро синкаться с дев-машиной, я делаю два алиаса для rsync, один на сервер пушит, другой с него забирает.

Особенно удобно, когда интернет плохой и ssh тоннель периодически рвётся.

alias rsfrom='rsync -chavzP --info="FLIST" from to'
alias rsto='rsync -chavzP --info="FLIST" to from'
  Развернуть 1 комментарий

Когда у вса автоскейлинг архитектура и надо иногда заходить на инсты по ssh:

slave_host() { 
ssh "ec2-user@$1" -i ~/.ssh/mykey.pem -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null; 
}
  Развернуть 1 комментарий
Никита Балуюсь с Питоном 13 января 2021

alias recall='cat ~/.histfile | grep ' (zsh)
или
alias recall='cat ~/.bash_history | grep ' (bash)
Когда забыл, к какому адресу подключался по SSH, или просто не помню какую-нибудь длинную ублюдскую командную строку

  Развернуть 1 комментарий
George Golman делаем сайты, работаем как сволочи! 14 января 2021

может быть, кто–то найдёт для себя интересные софтины или настройки/алиасы: https://github.com/golman/.files

+ надо окончательно перейти с рэнджер на и с неовима на емакс в эвил мод

небольшой, но очень полезный гист, если ваш опсос не разрешает раздавать инет с телефона

сам терминал, где всё это запускать — китти

  Развернуть 1 комментарий

@golman, все хочу попробовать kitty, но никак не найду время. Использую alacritty.

Можно в двух словах его основные бенефиты?)

  Развернуть 1 комментарий

@rhamdeew, полноценно могу сравнивать только с айтермом, потому что до китти юзал его кучу лет. если совсем кратко, айтерм очень сильно проигрывает в скорости, что одному, что другому. алакритти юзал минут полчаса, когда выбирал на что перейти. решающей стала фраза с реддита или ещё откуда–то: «алакритти невероятно быстрый, но китти ещё быстрее!» ,)
но если серьёзно, то у меня просто никак не отключались декорэйшнс в алакритти, а зачем нужен тайтл для окна терминала я так и не смог себе объяснить. китти, кстати, умеет выводить тайтл в менюбар, если есть необходимость. ещё, насколько я помню, в алакритти были какие–то проблемы, либо с лигатурами, либо с нерд–шрифтом, точно не вспомню. ну и не особо нужная фича, мелочь, но иногда очень приятная — в китти есть что–то типа встроенного тмукса

  Развернуть 1 комментарий

@golman, спасибо, попробую) Так я alacritty для себя довольно удобно настроил и решил tmux юзать. Но думаю kitty затестить стоит. Тоже читал что он быстрее.

Хотя казалось бы, первое написано на rust, а второе на python и си

  Развернуть 1 комментарий

@rhamdeew, Если ничего не путаю - в kitty на питоне только свистелки-перделки. Рендеринг, что самое критичное по скорости, там на сях полностью.

  Развернуть 1 комментарий

@golman, а мне, если можно, про emacs. В чем кайф переходить на него с эмуляцией вима?

Вообще, я давно хочу попробовать пересесть на емакс, но блин, вечно его ставить надо, а вим есть. Пока получается разница в этот геморрой.

  Развернуть 1 комментарий

@MartolodSlaaf, как минимум, из–за игр! ,)
то что вим есть везде — это прекрасно, но чистый вим особо не интересен, да и неовима тоже искаропки нет нигде (как там обстоят дела с асинхронщиной в обычном виме?). вим это всё–таки больше редактор, а емакс — иде, куча дополнительных возможностей, которые в виме идут только с плагинами или как хаки, есть в емакс искаропки или прикручивается легче, чем в вим. в принципе, из емакс можно вообще не выходить, если изучить и настроить всё, что в него напихали, ну а если нет — расширить. говорят, что вим быстрее и легче, но я не заметил разницы, может быть, она будет заметна на совсем маломощных системах, только непонятно, что на таких системах делать? если нужно просто поправить конфиг на серваке, то смысла нет ни в том, ни в другом, можно хоть в нано их отредактировать и забыть, тут и я обычно юзаю вим, не буду же я на всякие чужие серваки ради небольших правок ставить и настраивать софт. думаю, если не особо вдаваться в нюансы, то можно провести аналогию вскод/идея, из первого тоже можно попытаться сделать иде, но это всё–таки редактор, пусть и с огромным количеством разных плагинов.
пара полезных ссылок: спэйсмакс и дум емакс, ну и спэйсвим

  Развернуть 1 комментарий

@golman, хм. Звучит убедительно. Надо все-таки попробовать. Просто я все время останавливался на этапе "нужно скачать и настроить более-менее на всех серваках, на которых я работаю". Надо все-таки пересилить себя =)
Спасибо!

  Развернуть 1 комментарий
  • exa вместо ls (с алиасом l)
  • bat вместо cat
  • htop вместо top
  • fdfind вместо find

и

cd() { builtin cd $@ && exa --header --long } ибо после каждого cd в 9 из 10 случаев делаю потом ls (но, возможно, это мой личный загон)

p.s. Давно пытаюсь в классический вим/неовим уже который раз, но не могу найти способ адекватно настроить работу в нормальном режиме с учетом переключения раскладки, все-таки на кириллице я тоже немало пишу. Это возможно?

(До этого несколько лет использовал разную ВИМуляцию в других редакторах: сначала несколько лет Vintage в SublimeText, сейчас в VS Code c аналогичным плагином, но они лагают при быстром наборе текста, особенно VS Code, плюс частично тоже есть проблемы).

  Развернуть 1 комментарий

fish как и zsh по табу дает автокомплит и выбор подходящих команд

нумерую многие свои алиасы префиксами 00_ 11_
то есть для ввода алиаса(который уже не помню точно) набираю в терминал 1 и tab'аю дважды, после чего уже выбираю нужный алиас стрелочками из появившегося списка

alias 00_DNS_clean='sudo killall -HUP mDNSResponder; and sudo killall -HUP mDNSResponder; and echo "macOS DNS Cache Reset, use chrome://net-internals/#dns to clean chrome DNS cahce"'
alias 00_freemobileinternet='sudo sysctl -w net.inet.ip.ttl=65'

# just download file or torrent
alias 00_get:aria2c='aria2c'
# download from yputube instagram pornhub vk etc
alias 00_get:youtube-dl='youtube-dl'
alias 00_get:you-get='you-get'
alias 00_get:VK-get='youtube-dl -Acit -u "****" -p "*****"'

#play toorent online
alias 00_get:play_magnet_link='peerflix'
#download site
alias 00_get:site='wget -r -k -l 7 -p -E -nc'

alias 00_crack:zip='fcrackzip --brute-force --length 4-8 --charset a1'

# Gitlab CI tools
alias 01_CI:install-runner='brew install gitlab-runner'
alias 01_CI:exec='gitlab-runner exec docker '
alias 01_CI:lint='npx gitlab-ci-validate .gitlab-ci.yml'

# work 
alias 11_server:corgi='ssh kellas@******'
alias 11_server:panda='ssh kellas@******'
alias 11_server:cat='ssh kellas@******'
  Развернуть 1 комментарий

Пара штук для fuzzy-поиска

fzf - поиск по истории и **TAB 👍 https://github.com/junegunn/fzf
git-jump - моя поделка для поиска веток гита. https://github.com/mykolaharmash/git-jump

  Развернуть 1 комментарий

@J8A0YecI8hc5SLRZ, интересный проект git-jump =)

Но можно все решить и только средствами zsh с fzf
https://polothy.github.io/post/2019-08-19-fzf-git-checkout/

Я себе по этой статье настроил и на алиасы повесил.
gcf - fuzzy-search & checkout

  Развернуть 1 комментарий

Да, тоже крутое решение. Я делал в первую очередь штуку которая бы мне ветки показывала отсортированными по дате последнего использования + навигация человеческая, а поиск туда больше бонусом пошёл.

  Развернуть 1 комментарий

Клевые cli тулзы


Лайфхаки по алиасам

  • Комментить длинную команду чтобы было проще найти ее в history по ctrl-r или через fzf по #comment без создания отдельного алиаса для нее:
    • blablabla very long command --flag1 --flag2 --flag3=kek #comment
  • cpwd='pwd | tr -d "\n" | xclip -selection clipboard': Скопировать текущую pwd в системный буфер обмена и обрезать \n (требует установленный xclip) - удобно перехода в ту же директорию скажем в соседнем окне терминала:
  • cpls=path/to/script_below.sh: Скопировать путь к файлу или папке в буфер обмена (путь к скрипту ниже повесить на алиас)
    • #!/usr/bin/env bash
      #Copy filepath to clipboard
      FILEPATH=$1
      realpath $FILEPATH | tr -d "\n" | xclip -selection clipboard
      
  • v - nvim, так быстрее
  • Питонячие алиасы:
    • pcd='find . -type d -name __pycache__ -exec rm -r {} \+': удалить рекурсивно все папки __pycache__ в текущей и подпапках
    • py = python3
    • pym = python3 -m
  Развернуть 1 комментарий

@focking_fock,

красивый ping

mtr?

  Развернуть 1 комментарий

Пользуюсь Fish как основным шеллом - имеет хорошее автодополнение из коробки и работает быстро. Никак правда не привыкну к несовместимости с bash и часто переключаюсь на него если нужно написать что-то нестандартное.

Вместо grep обычно пользуюсь https://github.com/piranha/goreplace
Вместо man - https://github.com/raylee/tldr-sh-client
Если возможностей awk/sed и прочих не хватает или все выходит слишком сложно - https://github.com/tobimensch/termsql. Позволяет применить полноценный SQL (работает на SQLite) для работы с текстом.

SSH-ключи у меня запаролены, поэтому, чтобы немного упростить себе жизнь, пользуюсь keychain (что наверное не очень безопасно).

  Развернуть 1 комментарий

@HhTzCzHpCUBPXC3g, вместо grep использую ripgrep, вместо find fd

  Развернуть 1 комментарий

https://github.com/jarun/nnn - файловый менеджер с кучей плагинов, из коробки поддерживает https://github.com/rclone/rclone для взаимодействия с разными файлопомойками

  Развернуть 1 комментарий
export EDITOR='nano --tempfile ';

Предотвращает появление vim 🌚 при многострочном режиме редактирования, удобно для сложных, но одноразовых скриптов в консоли.

  Развернуть 1 комментарий

Пробовал юзать разные тудушки, но понял что мне достаточно одного текстового файла

export NOTES_DIR="~/super_private_notes/notes/"

#TODO
alias td="cat $NOTES_DIR/TODO.md"
alias tde="(cd $NOTES_DIR && vim TODO.md && git add TODO.md && git commit -m 'update TODO')"

#NOTES
alias n="(cd $NOTES_DIR && vim)"
alias nt="(cd $NOTES_DIR && vim tmp.md)"
alias nu="(cd $NOTES_DIR && git add . && git commit -m 'update notes')"

td - отображаем задачки
tde - редактируем задачки и после закрытия вим коммитим их

n - открываем вим в директории с заметками
nt - открываем временный файл в директории с заметками
nu - если нужно быстро закоммитить все это дело


Алиасы для быстрого перехода по директориям

alias cdd='cd ~/Downloads'
alias cdw='cd ~/Work'
alias cdru='cd ~/Work/ruby/projects'
alias cdph='cd ~/Work/php/projects'
alias cdpy='cd ~/Work/python/projects'

Но с недавних пор я открыл для себя zoxide и эти алиасы юзаю нечасто


Вот репа с .dotfiles

К примеру там есть функции добавляющие fuzzy search к git и алиасы

alias gbf='fzf-git-branch'
alias gcf='fzf-git-checkout'
alias gmef='fzf-git-merge'

Из консольных утилит юзаю и советую

vim/neovim

  • fzf
  • ripgrep
  • zoxide
  • bat
  • ranger
  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб