Меню

Введение в Bash и VIM

08.05.2018 - Bash, Linux
Введение в Bash и VIM

Базовые команды

Special directories

cd ..
cd ../.. (Убрать предиректории)

cat

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

% cat file1 file2 file3 > figfile

Эта команда возьмёт содержимое file1, file2 и file3 и объединит их вместе. Новые выходные данные отправляются на стандартный вывод.

cat также можно использовать для отображения файлов. Многие люди выводят cat’ом текстовые файлы через команды more или less, например так:

% cat file1 | more

При этом содержимое file1 будет выведено на экран и передано по конвейеру в команду more, чтобы файл можно было смотреть постранично.

Другим общим способом использования команды cat является копирование файлов. С помощью cat Вы можете скопировать любой файл, например так:

% cat /bin/bash > ~/mybash

Здесь программа /bin/bash была скопирована в ваш домашний каталог в файл с именем mybash.

Существует много вариантов использования cat, и здесь описаны только некоторые из них. Поскольку в cat широко используются стандартные потоки ввода и вывода, эта команда идеально подходит для использования в шелл-скриптах или как часть сложных команд.


cp адрес/имя_оригинала адрес/имя_копии
cp адрес/имя_оригинала адрес/

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

cp readme readme2
или
cp readme ../readme

В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.

cp readme Desktop/
или
cp readme ../

Создается копия на рабочем столе. Непосредственное имя копии в данном случае можно оставить прежним, т.к. полные имена (адрес + имя) файлов различны. Используется относительная адресация (каталог Desktop является дочерним по отношению к домашнему каталогу).

cp /home/irina/tux.png /mnt/D/pingvin.png

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

Чтобы скопировать каталог со всеми файлами и поддиректориями необходимо после команды cp прописать ключ r:

cp -r ./letters ./oldletters

Чтобы скопировать сразу несколько файлов

mkdir cool
cp beep.txt boop.txt cool

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


mv

Эта команда предназначена для перемещения, переименования файлов или директорий
* Переименовать файл source в destination

mv [options] [-T] source destination
mv [options] source [source2 ...] destination
mv [options] -t destination source [source2 ...]

mkdir

Создает новую категорию(ии)

mkdir Hello

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

mkdir -p a/b/c/d/

Звездочки и фигурные скобки

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

@ echo cat b{ee,oo}p.txt
cat beep.txt boop.txt
@ echo cat b*p.txt
cat beep.txt boop.txt
@ echo {a,b}{c,d}
ac ad bc bd
@ echo {a,b}{c,d}{x,y,z}
acx acy acz adx ady adz bcx bcy bcz bdx bdy bdz

Еще например, если нужно создать файлы, которые нужно последовательно пронумеровать, или создать папки таким образом, то можно воспользоваться конструкцией

img{0..100};
mkdir -p images/img{0..15}
echo{0..50}

Например можно сделать последовательность с шагом в 10

mkdir -p images/img{0..15..10}

echo — показывает результат операции или выводит строку

RM (Remove)

Команда для удаления файлов и папок (рекурсивно)

rm [options]... file...
rm b.txt

Удалить несколько файлов

rm newxyz/a.txt newxyz/b.txt

Или удалить всю директорию, включая поддиректории

rm -r newxyz

Опционные флаги rm

Options

-f, —force
ignore nonexistent files, never prompt
-i
Prompt before every removal
-I
Prompt once before removing more than three files, or when removing recursively.
Less intrusive than -i, while still giving protection against most mistakes
—interactive[=WHEN]
Prompt according to WHEN: never, once (-I), or always (-i). Without WHEN, prompt always
—one-file-system
When removing a hierarchy recursively, skip any directory that is on a file system different from that of the corresponding command line argument
—no-preserve-root
Do not treat ‘/’ specially
—preserve-root
Do not remove ‘/’ (default)
-r, -R, —recursive
Remove directories and their contents recursively
-v, —verbose
Explain what is being done
—help
Display this help and exit
—version
Output version information and exit

WC (number of lines, words and bytes in a file)

$ wc notes.txt
3 7 35 /home/subtrack/notes.txt

Также можно ввести wc, затем Enter — набрать текст прямо в баше и нажать ctrl + D. И ws сразу покажет информацию о только что набранном тексте.


head moby-dick.txt
head -n5 moby-dick.txt (показать первые пять строк)
head -c10 moby-dick.txt (показать первые 10 символов (characters))
git log | head -n2 (можно обрезать вывод из других команд)
$ tail -n5 moby-dick.txt

Можно вообще взять сначала начало текста, потом взять конец этого начала и вывести сжатым по ширине

$ head -n250 moby-dick.txt | tail -n3 | fold -sw 30
$ head -n250 moby-dick.txt | fold -w 30

Pathes

Пути, начинающиеся с » . « или c » .. « — относительные пути
Пути, начинающиеся с » / « — абсолютные пути

Запись в файл

Используюя » > «, мы можем записать выходные данные в файл.
Например, чтобы сделать файл greetings.txt с содержимым «ahoy thar», нам нужно

$ echo ahoy thar > greetings.txt

Чтобы вывести это на экран, введем

$ cat greetings.txt
ahoy thar
//Также мы можем записать вывод файла каталога в файл
ls > list.txt
ls >> list.txt

Стоит обратить внимание, что «>» перезапишет файл с новым контентом, если этот файл уже есть, в то время как «>>» добавит контент в конец файла

Что бы вставить запись вначале, а не в конце, нужно использовать hack

(echo at the beginning; cat hello.txt) > hello.txt_ && mv hello.txt{_,}

Read from a file

Мы можем получить данные на ввод из файла с помощью » < «.
Помните, что если wc не получит файл в качестве аргумента, то он возьмет их из стандартного ввода stdin. Мы можем загрузить файл в wc с помощью » < » вместо этого.

$ wc -c < notes.txt

Pipes

Один из самых важных типов редиректов — pipes (труба) оператор » | «.
С помощью » | » вы можете передать выходные данные из одной программы во входные данные другой.

Например, «ls -1» выведет список файлов, один на строку, в выходные данные. Команда «wc -l» в то время посчитает количество строк.

ls -1 | wc -l //Выведем кол-во файлов и папок
ls -l *.txt | wc -l //Выведем кол-во файлов txt

Curl

На следующем примере мы скачаем книгу, заменим все пробелы на перенос строки,а затем отфильтруем, чтобы оставило только слово whale или whaling, и посчитаем количество слов
Пример:

$ curl -s http://www.gutenberg.org/cache/epub/2701/pg2701.txt | sed -r 's/\s+/\n/g' | grep -iE 'whal(e|ing)' | wc -l
1691

Часто встречается, что файлы в инете сжаты с помощью gzip. Чтобы распаковать их после скачивания, нужно использовать утилиту gzip
Пример:

curl -s http://www.gutenberg.org/cache/epub/2701/pg2701.txt | gunzip

$ cal 2017 (покажет календарь за 2017 весь)
$ cal oct 2017 (покажет за октябрь)
$ cal -3 (покажет предыдущие 3 месяца)
$ date +'%H:%M:%S' (Выведет часы, минуты секи)
$ date +'%Y-%m-%d' (Выведет год, месяц, дата)
$ date +'%F' (тоже самое что и дата вверху)
(man date для большего контроля)

Можно таким макаром создавать файлы или папки или записывать в лог файлы

$ echo hello there >> `date +%F`.txt
2018-04-05.txt

Обратные кавычки и $()

Если нужно вставить результат одной функции в качестве аргумента другой, или вывести как в интерполяции, то нужно использовать вокруг этой функции либо «, либо $(). Например:

$ echo `date`
$ echo $(date)
$ echo some log data >> logfile-$(date +%F).log
$ echo some log data >> logfile-`date +%F`.log

Арифметика

С помощью $((...)) выражения, можно делать простые арифметические операции прямо в командной строке

$ echo $((4*5+1))
21
$ echo Greetings from the year $((`date +%Y` + 1000))
Greetings from the year 3018

xargs

Принцип работы xargs можно описать следующим образом: программа берет данные из стандартного ввода или из файла, разбивает их в соответствии с указанными параметрами, а затем передает другой программе в качестве аргумента.

В общем виде синтаксис команды xargs можно представить так

[команда_генератор_списка] | xargs [опции_xargs] [команда]
$ date +%Y | xargs echo Greetings from the year

С помощью xargs можно также ускорить процесс смены прав на файлы и папки для определенного пользователя или группы. Предположим, нам нужно найти все папки пользователя root и заменить их владельца на temp. Эта операция осуществляется при помощи команды:

$ find . -group root -print | xargs chown temp

С помощью xargs можно осуществлять массовое переименование файлов. Представим себе, что у нас есть группа файлов с расширением *.txt, и нам нужно заменить это расширение на *.sql. Это можно сделать при помощи xargs и потокового текстового редактора sed:

$ ls | sed -e "p;s/.txt$/.sql/" | xargs -n2 fmv

Сжать все файлы в текущей директории с помощью gzip можно, введя следующую команду:

$ ls | xargs -p -l gzip

Отметим, что операцию удаления файлов можно осуществить и без xargs, а с помощью команды

$ find . -name "*.sh" -exec rm -rf '{}' \

Описанный способ не сработает, если в имени одного из удаляемых файлов содержится пробел. Имя, состоящее из двух слов, разделенных пробелом, не будет воспринято как единое целое.
Чтобы решить эту проблему, используется опция print0 для команды find и опция -0 для команды xargs. Она заменяет стандартный разделитель (перенос строки на нуль-символ (\x0), который и означает конец хранимой строки:

$ find . -name "*.sh" -print0 | xargs -0 rm -rf

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

$ find /tmp -name "*.tmp"| xargs rm

Разные примеры

Например записывать в файл время каждые 5 сек

watch -n5 'echo `date +%T` >> hello.txt'
$ export

Вывести циклом числа

for x in {0..10}; do echo $x; done;

Чтобы вывести через цикл while

while true; do date; sleep 1; done;
while true; do node server.js; done;

Переменные

$ MSG = hi
$ echo $MSG
hi
$ MSG=hello
$ echo $MSG
hello
$ YEAR=`date +%Y`
$ echo $YEAR
2018
$ echo the current year is $YEAR
the current year is 2018
$ N=5
$ echo $((N*5))
25
$ echo $(($N*5))
25

Также можно экспортировать переменные из bash в другие среды. Например, экспортируем переменную из bash в node

$ MSG=Hello
$ export MSG
$ node
> process.env.MSG
'Hello'

Можно сразу в одной строке

$ export MSG='howdy'

Пример файла ~/.bashrc лектора
Пример файла bashrc лектора
ls ~/prefix/bin — пока еще не знаю для чего это ))

Кавычки

Чтобы баш не пытался интерпретировать некоторые символы, то их лучше брать в одинарные кавычки. Пример

echo '<b>wow</b>'

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

$ echo "There's no place like $HOME."
There's no place like /home/igenex.
$ echo "So long `date +%Y`..."
So long 2018...
$ echo "So long `date +%Y`... next stop $((`date +%Y` + 1))"'!'
So long 2018... next stop 2019!

Scripts

Intro

Если вы заметили, что набираете одну и ту же последовательность команд несколько раз, то рассмотрите возможность написать скрипт.
Просто вложите команды которые вы обычно пишете в файл и вставьте
#!/bin/bash в самом начале
Пример

#!/bin/bash
mkdir wow
cd wow
echo "yay" > zing.txt

Еще один пример

vi logger
#!/bin/bash
echo `date +'%F %T'` $1 >> `date +%F`.log
//Чтобы получить все аргументы, мы можем указать $* или $@ или писать аргументы в кавычках
//$1 - означает первый аргумент, который ему передается
//Сохраняем
//Даем права файлу, чтобы он мог быть выполнен (executed)
chmod +x logger
//Запускаем
./logger hello
ls

Еще один из способов получать данные из строки stdin — это команда read. Например, мы говорим читай строку в переменную LINE

$ read LINE
$ hello world
$ echo $LINE
hello world

Простой способ получить данные в shell (но походу не правильный)
Не best practice

#!/bin/bash
echo -n 'What is your name?'
read NAME
echo "Hello, $NAME"

PATH

Есть такая специальная переменная окружения, называемая $PATH. Она содержит список мест, разделенных посредством :, на который баш будет смотреть, когда вы набираете команду

usr/local/bin — отличное место, чтобы сохранять сюда свои скрипты
Таким образом их можно будет запускать просто указывая название скрипта в любом месте

Permissions

Каждый файл в UNIX системах принадлежит пользователю и группе.
Пользователи это аккаунты в системе, например, тот под которым я сейчас. Группы это коллекции пользователей
Чтобы посмотреть в какой категории я, нужно набрать groups.
####Как читать разрешения?
permissions
Возьмем к примеру строку, где подчеркнуты разрешения
Красным помечено, какие права у пользователя, который идет в третьем столбце. Зеленым подчеркнуто какие права у группы, которая идет в 4м столбце. Синим подчеркнуты права для всех остальных. Параметр x для скриптов означает что они могут быть запущены, а для директорий, что могут быть просмотрены. Если стоит прочерк -, то разрешение не дано.
Т.е. если совсем просто:
(user)read,write,execute(group)read,write,execute(others)read,write,execute
Можно изменять через цифры

$ chmod 644

Где первая цифра для пользователя, вторая для группы, третья для остальных. Сами же цифры получаются путем складывания идентификаторов:
* 4 — Write
* 2 — Read
* 1 — Execute
Т.е. 6 — это только чтение и запись, а 7 уже всё вместе, включая исполнение

Когда хотите дать разрешение. В первую очередь надо определить какие разрешения хотите дать или забрать (rwx) — read,write,execute и для какой категории пользователя (ugo) — user, group, others;
Например:

$ chmod g+w %название файла или папки%
$ chmod go+rw %название файла или папки%
$ chmod g-wx %название файла или папки%

В системе есть специальная переменная $?. Если последняя команда в bash была успешная, то $? выведет 0. В ином случае **не ** 0.

Пример работы с while

while ls cool.txt; do date; sleep 1; done;
touch cool.txt

Начнут выводится даты с задержками в секунду. Затем если ввести команду
rm cool.txt, то вывод дат прикротится.
Или можно проверить тоже самое через test -f

while test -f cool.txt; do date; sleep 1; done;

Описание циклов for, while, until

Связки (chain)

Чтобы запустить следующую команду в зависимости выполнилась первая или нет, можно воспользоваться оператором &&

$ test -f cool.txt && echo whatever
$ touch cool.txt

При следующем раскладе, не будет выполнен второй оператор, если выполнится первый

test -f cool.txt || echo whatever

Вывод в консоль

Чтобы не выводить ошибки в консоль, то используются конструкции
Насколько я понял, 2 ассоциируется с ошибкой
Вывод потока стандартного вывода (STDOUT) и потока ошибок (STDERR) в /dev/null:

сделать что-то > /dev/null 2>&1

Вывод потока ошибок (STDERR) в /dev/null:

сделать что-то 2>/dev/null

ВАЖНО

Чтобы пустить процесс в бэкграунд, нужно нажать ctrl + Z
В этот момент программа приостанавливается и отходит на задний план.
Затем, чтобы запустить её снова — нужно нажать fg (foreground)

Чтобы посмотреть все задачи в бэкграунде, нужно набрать команду jobs,
и чтобы запустить программу из бэкграунда:
* просто ввести fg — тогда запустит последнюю задачу
* ввести fg %номер задачи% (fg %3)
* Чтобы прекратить работу программы в bg, можно воспользоавться командой kill %process number% (kill -9 %2) или (kill %%)
* Если что %% — это последняя задача

Чтобы запустить программу сразу в бэкграунд, нужно добавить в конце &,
но при таком раскладе, программа сразу будет остановлена. Чтобы перейти в bg режим, чтобы программа там работала — нужно ввести bg
Например

(while true; do sleep 1; date; done) &

Что бы найти процесс по его имени, существует команда — pgrep watch -lf
Затем pkill %process name%


Screen

Вы можете использовать программы командной строки и позволять им быть запущенными, даже когда вы в пути.
Мультиплексный физический терминал между несколькими процессами (обычно интерактивными оболочками (interective shells)).
Чтобы создать новый скрин, нужно воспользоваться командой screen -S %название скрина%.
Например

$ screen -S whatever

Чтобы посмотреть список всех открытых скринов, введем screen -list
Чтобы закрыть последний ctrl + D
Мы можем отсоединить текущий скрин, нажав ctrl + a, затем нажав d.
Чтобы вернуться вновь к нему — на нужно набрать команду

$ screen -x %название скрина%

Создать новое окно ctrl + A, затем c

irc из командной строки

Установить irssi:

$ sudo apt-get install irssi

Затем нужно создать экран для него

$ screen -S irc

Сделать сервер

const http = require('http');
let server = http.createServer((req, res) => {
    res.end("You are a wizard!");
});
server.listen(8080);

Теперь запустим сервер

$ node server.js

Теперь отсоединим экран с помощью ctrl + A, затем d


Regexp

Rexex это pattern-matching language
Системные приложения UNIX работющий с regex
* grep
* sed
* perl
* vim
* less
Общепринятый формат regex
* /PATTERN/ — match
* s/PATTERN/REP/ — replace
Можно также добавлять флаги в конце
* /PATTERN/FLAGS
* s/PATTERN/REP/FLAGS/

Пример из sed

$ echo cat cabbage | sed 's/a/@/g'
c@t c@bb@ge

Здесь регекс означает первый флаг s(substitution) — заменить, далее открываем regex /. Далее, заменить что — a на @. Далее закрываем регекс / и ставим флаг g — глобальный поиск- заменить все вхождения.
Еще один пример с grep

$ echo -e 'one\ntwo\nthree' | grep ^t
two
three

Здесь параметр -e в echo означает, включить интерпретацию бэкслеш символа разными стоками типа \n — новая строка, и аналогичными

Иногда можно для определения паттернов регулярок использовать другие символы, вместо слеша.

$ echo 'xyz party' | sed 's!xyz!cat'
cat party

В данном примере используются ! — восклицательный знак.

Пример одного действия в js и bash

'1 two three\n'.replace(/1/, 'one');

тоже самое что в Баше

echo '1 two three' | sed 's/1/one/'

Match testing in js

if(/^-(h|-help)$/.test(process.argv[2])) {
    console.log('usage: ...');
}

capturing in js

let m = /^hello (\S+)/.test('hello cat');
console.log(m[1]); //cat

Флаги

/PATTER/FLAGS
s/PATTERN/REP/FLAGS

Универсальные символы [meta characters]
* . — matched any character
* ? — zero or one time
* * — zero or more times
* + — one or more times

. matches any character

$ echo hello beep boop | sed 's/b..p/XXXX/g'
hello XXXX XXXX

quantifiers
* ? — zero or one time
* * — zero or more times
* + — one or more times

$ echo 'dog and doge' | sed 's/doge\?/DOGE/g'
DOGE and DOGE
$ echo 'beep bp beeeep' | sed 's/be*p/BEEP/g'
BEEP BEEP BEEP
$ echo 'beep bp beeeep' | sed 's/be\+p/BEEP/g'
BEEP bp BEEP

Еще некоторые примеры на примере sed

echo 'hey cooooool whatever cool' | sed 's/\+/00/'
echo 'hey cooooool whatever cool' | sed -r 's/o{2,}/00/g'
echo 'hey cooooool whatever cool' | sed -E 's/o{2,}/00/g'

На некоторых движках нужно escapить meta символы, такие как + и ?. В других нет. В js и perl обычно не надо эскейпить метасимволы. Чтобы использовать grep или sed таким же образом, нужно использовать флаги
* sed -r
* grep -E

character class
[...]
Любой символ внутри квадратных скобок совпадёт.
Например, чтобы найти совпадение гласных: [aeiou]

$ echo 'beep and boop' | sed 's/b[aeiou]\+p/BXXP/g'
BXXP and BXXP

Еще несколько примеров

$ echo 'dog days cats' | sed -E 's/d[ao]/DA/g'
DAg DAys cats
$ echo 'dooooog days cats' | sed -E 's/d[ao]/DA/g'
DAoooog DAys cats
$ echo 'dog days cats' | sed -E 's/d[ao]+/DA/g'
DAg DAys cats
$ echo 'doooog days cats deg dx' | sed -E 's/d[^aeiou]+/DA/g'
doooog days cats deg DA
$ echo 'hello1234 what9999 5595959' | sed -E 's/[0-9]+//g'
hello what

Если мы допустим в js проверить чтобы пароль удовлетворял условию, что должно быть 8 символов, среди которых как минимум 1 большая буква, 1 маленькая и спецсимвол:

var pw = 'abc432!A';
/^[\w!@$%^&*\-+]{8,}$/.test(pw) && /[a-z]/.test(pw) && /[A-Z]/.test(pw) && /\d/.test(pw) && /[!@$%^*\-+]/.test(pw)

negated character class
[^...]
Если вставить ^ после открытой квадратной скобки в character class, то он инверсирует выбор. Т.е. будут искаться всё, кроме того что в скобках
Например, ищем согласные: [^aeiou]

$ echo 'beep boop' | sed 's/[^aeiou]/Z/g'
ZeeZZZooZ

Еще пара примеров на js

> 'cool <beans> zzzz'.replace(/<[^>]+>/, 'XXX')
'cool XXX zzzz'
> 'cool "beans" zzzz'.replace(/"[^"]+"/, 'XXX')
'cool XXX zzzz'

Character class sequences
Движок регекса предоставляют много предустановленных (pre-defined) символьных последовательностей
* \w — word character: [A-Za-z0-9_]
* \W — non-word chars: [^A-Za-z0-9]
* \s — whitespace: [ \t\r\n\f]
* \S — non-whitespace: [^ \t\r\n\f]
* \d — digit: [0-9]
* \D — non-digit: [^0-9]

anchors
* ^ — якорь начала
* $ — якорь конца

groups
(a|b) — match a or b
* () — capture group
* (?:) — non capture group

> 'beep boop'.replace(/b(ee|oo)p/g, 'XXX')
'XXX XXX'
> 'beep boop'.replace(/b(ee|oo){2}p/g, 'XXX')
'XXX XXX'

Получить то что в угловых скобках

> var str = 'cool <beans> zzz';
> var m = /<([^>]+)>/.exec(str); 

Заменить

> 'cool <beans> zzz'.replace(/<([^>]+)>/g, '"$1"');
'cool "beans" zzz'
> 'cool <beans> zzz'.replace(/<([^>]+)> (\w+)/g, '"$1":$2');
'cool "beans":zzz'

capture groups in sed

$ echo 'hey <cool> whatever' | sed -r 's/<([^>]+)>/(\1)/g'
hey (cool) whatever
$ echo 'cool <beans> zzz' | sed -E 's/<([^>]+)>/~~\1~~/g'
cool ~~beans~~ zzz

Допустим, нам нужно найти слова которые повторяются друг за другом, для этого мы можем воспользоваться следующей конструкцией

$ echo 'the the whatever cats dogs dogs cats etc' | sed -E 's/(\w+) \1/\1/g'
the whatever cats dogs cats etc

js

> 'the the whatever cats dogs dogs cats etc'.replace(/(\w+) \1/g, '$1')
'the whatever cats dogs cats etc'
> 'cat cat dog whatever'.replace(/((c[aA]t|d[oe]g)(\s|$)){2,}/,'XXX')
'XXXwhatever'

Для того чтобы заменить через sed в файле

sed 's/cool/k00l/g' -i hello.txt

В этом примере в файле hello.txt все слова cool будут заменены на k00l.

Документация regexp по perl

$ perldoc perlreref

vim

Vim

usefull links
* vim cheatsheet
* yennesposito.com

Команды

:w hello.txt

В данном случае сохранит в файл hello.txt
* :q — выйти

vim wow.txt

Открыть файл wow.txt в vim
* :wq — сохранить и выйти
* :q! — выйти без сохранения
* :o %название файла% — открыть файл, если вы уже в vim

in command mode

Searching in VIM

Можно комбинировать поиск с удалением
* d/PATTERN — delete to the next match of PATTERN
* d?PATTERN — delete to the previous match of PATTERN
* dn — delete to the next already matched pattern
* dN — delete to the previous already matched pattern**

Перепрыгнуть на место
* f, затем символ, до которого прыгнуть
* t, затем символ перед которым прыгнуть
Можно сгрупировать с удалением, просто подставиви перед этими командами d

Hallo malo i try to do that. To the home`
$ dtT
To the home`

Поиск и замена

:s/PATTERN/REPLACEMENT/FLAGS
//Examples
:s/cat/dog
:%s/cat/dog/g - искать на всех строках
:s/cat/dog/i

Visual select

Press v to go into visual select mode. Move the cursor around to select text.
Once you’ve selected a block, you can press:

Метки: , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *