Edytor Vim potrafi korzystać z powłoki systemowej za pomocą polecenia :r ! czy
też !. Polecenie r! pozwala odczytać standardowe wyjście polecenia
i wstawić je do bufora. Polecenie ! po prostu wykonuje polecenie systemowe.
Wstawienie wyjścia polecenia systemowego do bufora
Polecenie ls -alh, wyświetlające wszystkie pliki w bieżącym katalogu,
jednocześnie ustawia cztery kolumny w odpowiedniej kolejności: nazwa, rozmiar,
data, godzina.
:r!ls -alh | awk '{ print " ", $8, " ", $5, " ", $6, " ", $7}' | column -t
. 4,0K 06-29 14:30
.. 4,0K 06-29 13:21
_config.yml 1,6K 06-29 13:35
db.json 280K 06-29 19:42
drafts 12K 07-03 15:07
.git 4,0K 07-03 17:45
.gitignore 65 06-29 10:07
.gitlab-ci.yml 194 06-29 10:07
node_modules 44K 06-29 10:07
package.json 484 06-29 10:07
package-lock.json 134K 06-29 10:07
public 4,0K 06-29 14:45
README.md 2,8K 06-29 10:07
scaffolds 4,0K 06-29 10:07
source 4,0K 06-29 10:21
themes 4,0K 06-29 10:47
Podobne polecenie jak wyżej z tą różnicą, że listuje on plik, który właśnie
edytuję. Jest on wskazany za pomocą znaku %.
:r!ls -l % | awk '{ print " ", $8, " ", $5, " ", $6, " ", $7}' | column -t
source/_posts/Vim_praca_z_powloka_systemowa.md 929 07-03 18:00
Teraz użyjemy formatowania za pomocą awk
:r!ls -alh | awk {'printf ("\%20s\t\%6s\%8s\%8s\n", $8, $5, $6, $7)'}
. 4,0K 06-29 14:30
.. 4,0K 06-29 13:21
_config.yml 1,6K 06-29 13:35
db.json 280K 06-29 19:42
drafts 12K 07-03 15:07
.git 4,0K 07-03 17:45
.gitignore 65 06-29 10:07
.gitlab-ci.yml 194 06-29 10:07
node_modules 44K 06-29 10:07
package.json 484 06-29 10:07
package-lock.json 134K 06-29 10:07
public 4,0K 06-29 14:45
README.md 2,8K 06-29 10:07
scaffolds 4,0K 06-29 10:07
source 4,0K 06-29 10:21
themes 4,0K 06-29 10:47
W ramach ćwiczeń z awk jeszcze jedno rozwiązanie
:r!ls -alh | awk -v OFS='\t' '{ print $8, $5, $6, $7 }' | column -t
. 4,0K 06-29 14:30
.. 4,0K 06-29 13:21
_config.yml 1,6K 06-29 13:35
db.json 280K 06-29 19:42
drafts 12K 07-03 15:07
.git 4,0K 07-03 17:45
.gitignore 65 06-29 10:07
.gitlab-ci.yml 194 06-29 10:07
node_modules 44K 06-29 10:07
package.json 484 06-29 10:07
package-lock.json 134K 06-29 10:07
public 4,0K 06-29 14:45
README.md 2,8K 06-29 10:07
scaffolds 4,0K 06-29 10:07
source 4,0K 06-29 10:21
themes 4,0K 06-29 10:47
Kolejne polecenie z użyciem znaków specjalnych takich jak %. W przypadku kiedy
trzeba będzie użyć znaku % należy go poprzedzić znakiem \
:r!date +\%F_\%T 2018-07-03_18:14:15
Sprawdźmy ile wierszy ma nasz plik
:r!wc -l % | cut -f 1 -d ' ' 95
Pobranie treści strony, używając w3m, przeważnie strona będzie zawierała
różnego rodzaju niepotrzebne informacje i trzeba będzie je usunąć.
:r!w3m https://sdym.gitlab.io/2018/07/03/Vim_uruchomienie_polecenia_z_bufora/ -dump Vim uruchomienie polecenia z bufora Notes 2018-07-03 vim ...
Możemy też pracować na tekście, który znajduje się w buforze i przekazać go do zewnętrznego polecenia. Użyjemy do wyznaczenia linii lub zakresu. Jest to przydatne przy szyfrowaniu czy obliczeniu sumy kontrolnej.
Tutaj zaszyfrujemy tekst z linii 117 za pomocą gpg i hasła tajnehaslo
Tekst niezaszyfrowany w linii 117 ``` ``` :117 ! gpg -a -c - -----BEGIN PGP MESSAGE----- jA0EBwMC8MJMzMCMn+Lp0lcBi6dx1AYRx9OE/xXZSHWTpbi2Zy9Rt5AVw2IIjyYS n3hobFW418P8IDXL0swMT7ljaZBFujd/axC18CaGXixXfBgosIW4QcVoVhyOublG 2r4YGqJ0Ip8= =Dlnx -----END PGP MESSAGE-----
Spróbujmy to odszyfrować, tekst odszyfrowany pojawi się w miejscu zaszyfrowanego.
:121,127 ! gpg -d - gpg: dane zaszyfrowano za pomocą AES gpg: zaszyfrowane jednym hasłem Tekst niezaszyfrowany w linii 117
Zaszyfrowanie całego pliku, efektem tego polecenia będzie plik o tej samej
nazwie z rozszrzeniem asc.
:!gpg -a -c %
Oczywiście możemy go zaszyfrować i wstawić w tym pliku
:r!gpg -a -c -o- % -----BEGIN PGP MESSAGE----- jA0EBwMCmYkAj1CGFMHp0uoBolAcFPD74Z4Qys7dxDbMrZcoOr1Z3ZBF/+w7LJrS rWMOMER02Wz38ih9S0OR3mjwrtU//u9LHrHhVtEH9jnhvuOOM6lbNK7G7bF2wTSw sNsotFws4wlnaXfHrHymN4HXdHI3LH4KSBOcLmbLWs8rDhYZvjEEF65dmuH+pA1t ... djhK0ksMfjOe/FS8N3yy4zOPEwhZEbn+F6GvysHELdpfBICkamN3a6cF4xbt8aOy NLS5j4KP7rXMHy1tmaZ8tG1C2vX0MKm79QwFpYfiPyeRcpSR5nLDYggzISPMeg== =Ad2e -----END PGP MESSAGE-----
Teraz spróbujmy zaszyfrować inny plik i wstawić go w to miejsce
:r!gpg -a -c -o- /etc/i3/config -----BEGIN PGP MESSAGE----- jA0EBwMCExkKVsCLc1Lp0usBCPZMKh0ifLBSJ7SFC9jQPOk+03IyJasyZJauhP4U 8+PBaaVnbk7J9V+5Ig8gtKLKYMwd53LHgKdOKqMUcC6ou1mR/Bjc0JtHSO0hFpV5 9jtMhibT/FNRUv+6iANlCTahDZBtOpR4Gx4ZTJKJQbmKjlRBRs+jPzfihCTA70/C ... LBtyCuv0E2b3pWISP8qRo0+QLkecP1sofGnQu9ZUlszCaeL/VBpf8Sz6dm6Vecuh DzEKXmBsQ1Dw =ipfY -----END PGP MESSAGE-----
Istnieje jeszcze inna możliwość uruchomienia polecenia i wstawienia wyniku do
bufora jest to skrót !! efektem czego będzie przejście do trybu komend z już
wstawioną komendą :.!, po której możemy wstawić swoje polecenie.
Na przykła d !!, :.!ls -alh czego efektem będzie wstawienie wyniku
polecenia ls -alh do bufora.
Kolejnym ciekawym rozwiązaniem jest uruchomienie polecenia znajdującego się w treści pliku.
Powiedzmy, że mamy plik o treści:
du -sh /home/$USER
Przechodzimy do linii gdzie znajduje się polecenie du i tak jak poprzednio
wciskamy !! pojawia się nam :.! teraz możemy użyć zmiennej $SHELL do
wykonania komendy lub innej powłoki systemowej np sh, całość powinna wyglądać
tak:
:.!$SHELL ``` lub ``` :.!sh
Można sobie zmapować skrót, ja używam <leader>e:
nnoremap <leader>e !!sh<cr>
Uruchamianie poleceń z edytora Vim
Sprawdzenie bieżącego katalogu
:!pwd /home/user/
Konwersja pliku Markdown do HTML za pomocą pandoc
:!pandoc % -t html -o %.html
| Date: 2020-10-21T21:22:56+02:00 |