Здесь я обнаружил проблемы, которые, похоже, привели к тому, что это не работает. Прежде всего, у меня были симлинки ~/.Xdefaults
и ~/.Xmodmap
которые просто избыточны из-за использования одинаковых dotfiles в дистрибутивах Linux. Хотя ни один из них, похоже, не влияет на настройки буфера обмена напрямую, их удаление, похоже, имеет значение.
Настройка параметров синхронизации буфера обмена в X11 является обязательной. В итоге я остановился на следующих настройках:
# Clipboard syncing
defaults write org.macosforge.xquartz.X11 sync_clipboard_to_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_clipboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_primary -boolean true
defaults write org.macosforge.xquartz.X11 sync_primary_on_select -boolean false
# Run xterm by default (without this vim's clipboard doesn't work)
defaults write org.macosforge.xquartz.X11 app_to_run -string "/opt/X11/bin/xterm"
# Set default shell
defaults write org.macosforge.xquartz.X11 login_shell -string "/usr/local/bin/zsh"
Запущенный xterm по умолчанию - это обязательно. X11, похоже, не хочет делиться своим буфером обмена с буфером OS X, пока xterm не будет запущен хотя бы один раз. Он даже не должен быть открыт, он просто должен быть запущен в этом сеансе. Эта настройка стоит по умолчанию для X11, но некоторые люди меняют ее, чтобы xterm не запускался каждый раз, когда они запускают X11. Если вы запустите vim с +clientserver
в первый раз до открытия XQuartz/X11, он будет игнорировать эту настройку при открытии X11. Если xterm не будет запущен до того, как вы запустите vim, буферы обмена не будут синхронизированы, и вам придется перезапустить vim, чтобы исправить это. Я решил открывать XQuartz по умолчанию при каждом входе в систему и скрывать его.
Вы должны правильно настроить буфер обмена vim. Эти настройки работают:
if has("clipboard")
set clipboard=unnamed " copy to the system clipboard
if has("unnamedplus") " X11 support
set clipboard+=unnamedplus
endif
endif
Добавление unnamedplus
в настройки буфера обмена использует оба регистра *
и +
для каждого выделения. Эти настройки гарантируют, что буфер обмена будет установлен на unnamed
, если настроен только +clipboard
, и на unnamed,unnamedplus
, если у вас есть +xterm_clipboard
. Я нашел этот вариант здесь.
Затем вы можете просто установить Vim через homebrew с помощью:
brew install vim --with-client-server
К сожалению, синхронизация с X11 не работает стабильно, так что пока я отказался от этой установки.
Было бы неплохо, если бы вы включили пример файла настроек, хотя мы можем догадаться по коду, сохраняющему настройки.
Одна из проблем с вашим кодом заключается в том, что в нем нет "$settingName"
.
Примерно так должно работать, если в параметрах нет пробелов.
echo enter setting name
read name
found=false
while read settingName dir1 ft1
do
if [ "$name" == "$settingName" ]
then
cp "$ft1" $dir1
found=true
fi
done < preco.txt
if ! $found; then
echo "$name not found"
fi
Оператор read settingName dir1 ft1
прочитает три поля из вашего файла preco.txt
в именованные переменные.
Другой момент заключается в том, что вы не хотите отображать сообщение об ошибке для каждой несоответствующей строки, вы должны прочитать файл и отобразить сообщение об ошибке только в том случае, если ни одна из строк не совпадает.