Общесистемный буфер вставки vim на уровне выполнения 3

Или вы можете использовать простой сценарий:

#!/bin/bash    
ls -alFQ | grep '^l'

Мантра Unix должна иметь небольшие простые утилиты, которые можно связать вместе, чтобы достичь сложной задачи. Так что, хотя технически это не утилита POSIX, она очень близка к таковой.

Если вы хотите получить фантазию, вы можете только выбрать, какую часть строки вернуть:

#!/bin/bash    
ls -alFQ | grep '^l' | tr -s ' ' | cut -d ' ' -f 11

-f 11 возвращает файл, на который указывает ссылка, а -f 10 возвращает имя ссылки. Это работает только в том случае, если в именах файлов нет пробелов, иначе это становится хитрым делом - скорее всего, это можно сделать, но вам придется обойтись без пробелов или использовать шаблон, который в данный момент больше, чем мне хочется написать.

Если вы хотите что-то, что возвращает 0/1:

    #!/bin/bash
    if [[ -n $(ls -alFQ | grep '^l') ]]; then
        exit
    else
        exit 1
    fi
3
07.04.2018, 08:45
2 ответа

Это .viminfoфайл (:h viminfo).

Когда вы выходите из vim, он записывает текущее состояние, например историю команд и значения регистров, в этот файл. При запуске он считывает файл и восстанавливает описанное им состояние. Это означает, что последовательные сеансы vim (имеют )общее состояние, а одновременные — нет.

Вы можете принудительно повторно -прочитать файл viminfo с помощью:rv/ :rviminfoкоманды и вручную записать его с помощью:wv. Итак, y:wv в одном редакторе и:rvp в другом будут работать, но будут побочные эффекты:все значения вашего регистра и история команд может быть сброшена, и довольно много других вещей, которые могут иметь или не иметь значения для вас.

Это также может быть преимуществом. :вы можете использовать весь диапазон регистров для получения нескольких буферов копирования между редакторами, чего нет в системном буфере обмена. С другой стороны, это не очень удобно, если вы не перепривязываете y, чтобы делать это автоматически, и pвы, вероятно, не хотите каждый раз читать файл. Я читал/записывал viminfo, привязанный к командам лидера, но это экономит мне только одно нажатие клавиши (и похоже, что вы будете использовать его чаще ).


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

6
27.01.2020, 21:13

Как и обещал:

Скрипты для Linux (my $HOME/utilнаходятся в my$PATH):

~/util ❯❯❯ cat linux_pb/pbcopy                                         ✘ 130 master b28083b $ ◼
#!/bin/bash

# pbcopy impl for linux!
# pipe the stdin to a file using cat. Not using bash builtins due to concerns
# about NULs.

FILE="$HOME/.clipboard"
touch $FILE
chmod 600 $FILE
cat > $FILE
~/util ❯❯❯ cat linux_pb/pbpaste                                              master b28083b $ ◼
#!/bin/bash

# pbpaste impl for linux!
# just use the content of the file.

cat ~/.clipboard

Привязки vim:

vnoremap <silent> <Leader>y :w !pbcopy<CR><CR>
" the leader y works like normal yy (but for my clipboard)
nnoremap <silent> <Leader>y :.w !pbcopy<CR><CR>
nnoremap <Leader>p :read !pbpaste<CR>

Идемпотентный сценарий псевдонима оболочки (Я беру этот псевдоним скрипта из bash и zsh):

if [ "$(uname)" = Linux ] && ! [[ "$PATH" = *"/linux_pb"* ]]; then
    PATH="$PATH:$HOME/util/linux_pb"
fi

Я, скорее всего, еще более конкретизирую конфигурацию Linux, когда начну использовать настоящий Linux с X, чтобы также воспользоваться его буфером вставки. Потребуется какой-то механизм для создания pbcopyи pbpasteпрограмм, подобных этой .

Этот подход основан на единообразии на программном уровне, поэтому Vim может использовать функциональные возможности точно так же, как я теперь могу использовать командную оболочку.

1
27.01.2020, 21:13

Теги

Похожие вопросы