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

Здесь я обнаружил проблемы, которые, похоже, привели к тому, что это не работает. Прежде всего, у меня были симлинки ~/.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 не работает стабильно, так что пока я отказался от этой установки.

0
11.05.2019, 16:12
1 ответ

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

Одна из проблем с вашим кодом заключается в том, что в нем нет "$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в именованные переменные.

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

0
28.01.2020, 03:41

Теги

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