YAML для отображения значений tmuxinator внутри строки - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть следующий YAML для tmuxinator:

# ~/.tmuxinator/st.yml
name: st
root: ~/learn/gnu-smalltalk
attach: false

# Runs before everything. Use it to start daemons etc.
on_project_start:
  - emacs --daemon=gst --title=GST
  - export EDITOR="emacsclient --server-file=gst -c -n"
  - export VISUAL=$EDITOR
  - $EDITOR &;
  - gst-load -iI shampoo.im Shampoo
  - gst-remote -I shampoo.im --daemon
  - gst-remote -e "Shampoo.ShampooServer startOn: 9090 login: 'st' pass: 'st'"

on_project_exit:
  - tmux -CC attach -t st

windows:
  - console-emacs-dev:
      - export EDITOR="emacsclient --server-file=gst -c -n"
      - export VISUAL=$EDITOR      
      - echo "A currar"
  - exercism:
      - export EDITOR="emacsclient --server-file=gst -c -n"
      - export VISUAL=$EDITOR

У меня есть две ошибки, которые я не могу решить, во-первых:

 st.yml    14  61 error           mapping values are not allowed in this context (yaml-ruby)

Я пытался выбрать персонажа ':',

gst-remote -e "Shampoo.ShampooServer startOn: 9090 login\: 'st' pass\: 'st'"

но то же самое происходит

не работает.

Ответы [ 2 ]

3 голосов
/ 29 апреля 2019

Хотя escape-последовательности YAML являются надмножеством последовательностей языка C, вы по-прежнему не можете экранировать :.

Предполагая, что gst-remote выполняется через какую-то оболочку, вам нужно экранировать обратную косую черту:

gst-remote -e "Shampoo.ShampooServer startOn: 9090 login\\: 'st' pass\\: 'st'"

Я бы не стал много пытаться с & и предположил бы, что существует вызываемая оболочка, которая правильно обрабатывает это. Вместо этого используйте параметр emacsclient --no-wait:

   -n, --no-wait
          returns immediately without waiting for you to "finish" the buf‐
          fer in Emacs.

Вы также должны использовать .yaml в качестве расширения для своих файлов YAML. Это не только рекомендуемое расширение для YAML с 2006 года, оно также предотвращает путаницу с файлами в формате YML .

0 голосов
/ 01 мая 2019

Эта ошибка - известная проблема в синтаксической ошибке YAML, когда строка содержит двоеточие + пробел, но при использовании Ansible после чтения ошибка решение, которое работает, заключалось в удалении символа пробела после символа двоеточия':', также в tmuxinator это была проблема

  - gst-remote -e "Shampoo.ShampooServer startOn:\s9090 login:\s'st' pass:\s'st'."

Это работает для ansible / phyton, но не для ruby ​​/ tmuxinator

Это решение не 'работать для меня, я пытался избежать де пробела внутри строки \, \ s, или даже \ u0020, ничего не получалось, в конечном итоге читал эти два поста, кажется, что ruby ​​и python используют эту строку по-разному, с ruby ​​Iиногда получаю эту ошибку undefined method shellescape 'для Hash`.

Поэтому я продолжаю искать и

Объяснение YAML 1

Объяснение YAML2

с первой ссылки:

Обычные скаляры (поле значения) никогда не должны содержать комбинаций символов «:» и «#».Такие комбинации могут привести к неоднозначности с ключом сопоставления: пары значений и комментарии.

Кроме того, внутри коллекций потоков или при использовании в качестве неявных ключей простые скаляры не должны содержать «[», «]», «{»,«} »И«, »символы.Эти символы могут привести к неоднозначности со структурами сбора потока.

Вы можете попробовать следующие опции:

YAML

Итак, окончательный файл yaml был:

# ~/.tmuxinator/st.yaml
name: st
root: ~/learn/gnu-smalltalk
attach: false

# Runs before everything. Use it to start daemons etc.
on_project_start:
  - emacs --daemon=gst --title=GST
  - export EDITOR="emacsclient --server-file=gst -c -n"
  - export VISUAL=$EDITOR
  - $EDITOR
  - gst-load -iI shampoo.im Shampoo
  - gst-remote -V -I shampoo.im --daemon
  - >-
    gst-remote -V -e "Shampoo.ShampooServer startOn: 9092 login: 'toni' pass: 'toni'."

on_project_exit:
  - tmux -CC attach -t st

windows:
  - console-emacs-dev:
      - export EDITOR="emacsclient --server-file=gst -c -n"
      - export VISUAL=$EDITOR      
      - echo "A currar"
  - exercism:
      - export EDITOR="emacsclient --server-file=gst -c -n"
      - export VISUAL=$EDITOR
...