06-helix[Русский]-Учебник.Буфера.Часть02
## Opening buffers with more complex filtering logic
## Открытие буферов с помощью более сложной логики фильтрации
[Buffers-opening-more](https://github.com/helix-editor/helix/w … ring-logic)
Эта команда откроет каждый отдельный файл с помощью
`.rs` расширение в текущем каталоге, рекурсивно. Таким образом, он будет открывать даже супер вложенные файлы, такие как
`./some/directory/some/where/very/nested/main.rs`:
```shell
hx **/*.rs
```
Или, в качестве другого примера, мы хотим открыть буфер в Helix для каждого файла,
содержащего строку `export default async function`,
using the GNU utilities
[`find`](https://www.gnu.org/software/findutils/ … /find.html)
and [`grep`](https://www.gnu.org/software/grep/) we can do just that:
```shell
hx $(find . -type f -exec grep -l \
"export default async function" {} +)
```
Let's dissect the command:
- `find .`: Выполните поиск по каждому файлу и каталогу в текущем каталоге и любых подкаталогах.
- `-type f`: Сопоставляйте только файлы, а не каталоги.
- `-exec grep -l "export default async function" {}`:
Выполняет следующую команду для каждого файла: выполняет поиск строки
`export default async function`, выводим имена файлов, которым он соответствует.
- `+` группирует файлы.
- Вся команда `find . -type f -exec grep -l "export default async function" {} +`
приведенные выше имена всех совпадающих файлов будут выведены следующим образом:
```
./file-one.js
./nested/another-file.js
./somewhere/deep/nested/file.ts
```
"shell variable expansion" = "расширение переменной оболочки"
Placing it inside of
`$( ... )` uses
[shell variable expansion](https://www.gnu.org/software/bash/manua … nsion.html) чтобы эффективно заменить всю команду следующим идентичным выводом:
```shell
hx ./file-one.js \
./nested/another-file.js \
./somewhere/deep/nested/file.ts
```
Который затем открывает каждый из этих файлов в Helix в виде отдельного буфера.
Эта функция удобна, когда вам нужно выполнить определенную задачу для каждого отдельного файла, соответствующего шаблону, но эта задача не может быть автоматизирована,
поскольку каждый файл требует проверки вручную.
## Opening buffers at specific line and column numbers
[](https://github.com/helix-editor/helix/w … mn-numbers)
Наконец, полезно знать, что Helix может открывать файлы с определенными номерами строк, а также столбцов. Например, эта команда открывает`main.rs` file at line 122:
```shell
hx main.rs:122
```
В строке 122, столбец 6, откроется следующая информация:
```shell
hx main.rs:122:6
```
Мы можем использовать приведенные выше два факта, чтобы сделать некоторые выводы.
**_truly powerful_** commands.
Вместо того чтобы вручную просматривать более 40 файлов markdown,
чтобы исправить эти орфографические ошибки, запустите следующую команду, с которой мы сейчас разберемся:
```shell
hx $(pnpm dlx cspell **/*.mdx | rg "^\S+")
```
Эта команда найдет все орфографические ошибки, используя`cspell` утилиту
`cspell` можно использовать следующим образом для проверки орфографии каждого
`.mdx` file (these files which contain _this site_'s content):
```shell
pnpm dlx cspell **/*.mdx
```
Он выводит информацию в следующем формате:
```shell
usage/text-objects.mdx:43:53 - Unknown word (nside)
usage/text-objects.mdx:43:62 - Unknown word (textobject)
```
Поскольку Helix может работать с первой частью текста перед пробелом,
мы хотим отфильтровать все до первого пробела.
Мы можем сделать это, сопоставив "последовательность символов без
пробелов в начале" с этим регулярным выражением:
`^\S+`.
- `^` означает "в начале".
- `\S` означает "символ, не состоящий из пробелов".
- `+` означает "совпадение по крайней мере с одним вхождением"
Таким образом, это регулярное выражение извлечет следующее из приведенного выше примера:
```shell
usage/text-objects.mdx:43:53
usage/text-objects.mdx:43:62
```
Чтобы применить регулярное выражение к выходным данным `cspell` tool, we use
[`ripgrep`](https://github.com/BurntSushi/ripgrep)
который является современной альтернативой `grep`, so the following command:
```shell
pnpm dlx cspell **/*.mdx | rg -o "^\S+"
```
Приведет к получению результата, подобного этому:
```
basics.mdx:6:22 basics.mdx:82:56 basics.mdx:236:51 basics.mdx:297:72 basics.mdx:305:109 basics.mdx:309:104 installation.mdx:6:40
```
Чтобы использовать это в helix, мы просто заключаем всю команду в
`$( ... )`чтобы использовать расширение оболочки:
```shell
hx $(pnpm dlx cspell **/*.mdx | rg -o "^\S+")
```
Чрезвычайно мощн0. - он будет открывать каждую орфографическую ошибку
в качестве буфера, мы сможем обходить их с помощью
"gn" и "gp".
### Buffers-Tip(Совет)
[Buffers-Совет](https://github.com/helix-editor/helix/w … uffers#tip)
Ripgrep также включает в себя `--vimgrep` флаг, который будет выводить
каждое совпадение, начинающееся именно с того синтаксиса, который нам нужен:
```
filename:line_number:column_number
```
## Буферы - одновременный просмотр нескольких буферов
[Buffers-Несколько](https://github.com/helix-editor/helix/w … rs-at-once)
До сих пор мы исследовали возможность открытия нескольких файлов в фоновом режиме,
но на самом деле мы видели только один буфер одновременно.
Для переключения между ними нам приходилось нажимать такие команды, как gp и gn.
Возможно открыть несколько файлов одновременно.
Например, если у нас открыт наш "файл1, файл2, файл3".
Мы можем открыть "split" by using `Ctrl + w + s`.
Our cursor is at the bottom split.
To navigate to the upper split, we use motions which are similar to
h, j, k and l:
- Ctrl + w + h перемещается в буфер выше
- Ctrl + w + j перемещается в буфер ниже
- Ctrl + w + k перемещается в буфер on the вправо
- Ctrl + w + l перемещается в буфер on the влево
У каждого из этих буферов есть выделенная строка состояния.
В строке состояния текущего активного буфера будет отображен его режим.
Внутри этих буферов мы можем использовать их как обычно.
Таким образом, мы можем переключаться между разными буферами,
используя
`gn` для перехода к следующему, и
`gp` для перехода к предыдущему.
Пусть все буферы представляют разные файлы.
Теперь закройте их один за другим с помощью `Ctrl + w + q`.
## Открытие разделов из командной строки
[Buffers-opening-splits](https://github.com/helix-editor/helix/w … mmand-line)
Флаги `--vsplit` и `--hsplit` можно использовать в Helix, чтобы открывать
все файлы как с вертикальным, так и с горизонтальным разделением.
Let's quit completely with
`
a` yet again,
Эта команда открыла два файла, но на этот раз с разделением по вертикали,
а не по горизонтали:
```shell
hx --vsplit file1 file2
```
Давайте закроем буфер #2 with `Ctrl + w + q` чтобы изучить нашу следующую команду.
`ga` lets us _**g**oto_ the last _**a**ccessed_ file. That is, consider this chain of actions:
`ga` позволяет нам получить доступ к последнему обработанному файлу.
То есть рассмотрим эту цепочку действий:
- Открыть файл `main.rs`
- Открыть файл `lib.rs`, this is our current buffer.
- Pressing `ga` откроет буфер, соответствующий `main.rs`
- Повторное нажатие кнопки "ga" приведет к открытию the `lib.rs` buffer.
- Повторное нажатие кнопки "ga" приведет к открытию `main.rs` buffer.
- Повторное нажатие кнопки "ga" приведет к открытию `lib.rs` buffer.
- PПовторное нажатие кнопки "ga" приведет к открытию `main.rs` buffer.
Если вам понравился перевод, можете пожертвовать в фонд форума,
или узнать реквизиты для банковского перевода через опубликованные контакты.
- Подпись автора
Подпись: С уважением, Максим.
мой jabber id : maksim.nk@jabber.ru ;