Или вы можете использовать простой сценарий:
#!/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
Это .viminfo
файл (:h viminfo
).
Когда вы выходите из vim, он записывает текущее состояние, например историю команд и значения регистров, в этот файл. При запуске он считывает файл и восстанавливает описанное им состояние. Это означает, что последовательные сеансы vim (имеют )общее состояние, а одновременные — нет.
Вы можете принудительно повторно -прочитать файл viminfo с помощью:rv
/ :rviminfo
команды и вручную записать его с помощью:wv
. Итак, y:wv в одном редакторе и:rvp в другом будут работать, но будут побочные эффекты:все значения вашего регистра и история команд может быть сброшена, и довольно много других вещей, которые могут иметь или не иметь значения для вас.
Это также может быть преимуществом. :вы можете использовать весь диапазон регистров для получения нескольких буферов копирования между редакторами, чего нет в системном буфере обмена. С другой стороны, это не очень удобно, если вы не перепривязываете y
, чтобы делать это автоматически, и p
вы, вероятно, не хотите каждый раз читать файл. Я читал/записывал viminfo, привязанный к командам лидера, но это экономит мне только одно нажатие клавиши (и похоже, что вы будете использовать его чаще ).
Есть и другие подходы, которые вы могли бы использовать, например, вручную развернуть страницу в определенный файл , чтобы избежать побочных эффектов. Не похоже, что ты этого хочешь,но это вариант. Есть также плагины, которые делают более или менее то, что вы ищете, а также система сеансов. Они не являются прямыми ответами на ваш вопрос, но они могут сообщить, где вы хотите оказаться.
Как и обещал:
Скрипты для 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 может использовать функциональные возможности точно так же, как я теперь могу использовать командную оболочку.