Zsh preexec - Как обрезать все отступы в начале кодового блока?

Сначала необходимо понять, что разрешения основаны на файлах.

Если вы хотите, чтобы файл /var/example.txt был доступен для чтения GM и записи для FTP , вы можете установить его владельца на FTP ( chown FTP /var/example.txt) и установите его разрешения на 644 ( chmod 644 /var/example.txt или chmod u + rw, o + r /var/example.txt ). Это сделает файл доступным для чтения всем, но только для записи по FTP.

Если вы хотите, чтобы GM имел доступ для чтения, вам нужно будет поместить обоих пользователей в одну группу и установить разрешение на 640 .

Для получения дополнительных сведений о правах доступа к файлам обратитесь к странице руководства chmod .

3
08.05.2017, 14:45
1 ответ

Делать это в preexec было бы слишком поздно. К тому моменту код уже был разобран. Если вы измените его, его нужно будет снова проанализировать (и, возможно, zsh потребуется запросить дополнительные строки для завершения кода).

Возможно, здесь вы можете сделать это в виджете accept-line, то есть непосредственно перед тем, как редактор строки передаст строку парсеру оболочки:

accept-line() {
  emulate -L zsh       # default zsh behaviour locally
  set -o extendedglob  # with extendedglob for ## (= ERE +) below

  BUFFER=${BUFFER##[[:blank:]]##} # remove leading blanks

  # remove blanks after newlines in case a multiline buffer is accepted
  # for instance after a safe-paste or a newline entered with <Alt+Ret>
  BUFFER=${BUFFER//$'\n'[[:blank:]]##/$'\n'}

  # call original accept-line
  zle .$WIDGET
}
zle -N accept-line
3
27.01.2020, 21:25

Теги

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