Как сослаться на локальный для сценария словарь в отображении Vim?

Я возможен сделать все на сингле ssh соединение/сессия:

ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst

Это:

  1. Копии local_src кому: remote_dst,
  2. Выполняется command,
  3. Копии remote_src кому: local_dst.

Но если command записи на stdout, результат с также быть в local_dst. Если command вход чтений от stdin, это получит и EOF.

3
16.12.2012, 02:47
1 ответ

Нет никакого пути (что я знаю о) к непосредственно локальным переменным сценария доступа вне контекста того сценария; <SID> только работы для функций (и только в отображениях).

Вы могли обеспечить косвенный доступ через функцию, хотя:

function! s:FoobarHash()
  return s:Foobar
endfunction
function! s:MySurroundingFunctionIWantToKeep()
  let s:Foobar={'foo': 'bar'}
  map \42 :echo <sid>FoobarHash()['foo']<cr>
endfunction
call s:MySurroundingFunctionIWantToKeep()

В зависимости от того, как изолированный Вы хотите сохранить переменную, Вы могли сделать функцию “средства доступа” более строгой (только позволяют определенные ключи, только позволяют доступ для чтения, только позволяют записи определенным ключам, и т.д.).

let s:Foobar={'foo': 'bar', 'baz': 'quux'}
function! s:FoobarAccess(...)
  " Provide limited access to the script-local hash s:Foobar

  if a:0 == 1
    " allow read access to all keys
    return s:Foobar[a:1]

  elseif a:0 == 2
    " allow write access to only 'foo'
    if a:1 !=# 'foo'
      throw 'FoobarAccess: not allowed to write to key ' . a:1
    endif
    let old = s:Foobar[a:1]
    let s:Foobar[a:1] = a:2
    return old

  else
    throw 'FoobarAccess must take exactly one or two arguments'
  endif
endfunction


map \42 :echo <sid>FoobarAccess('foo')<cr>
map \43 :echo <sid>FoobarAccess('foo','new value')<cr>
map \44 :echo <sid>FoobarAccess('baz')<cr>
map \45 :echo <sid>FoobarAccess('baz',1)<cr>
3
27.01.2020, 21:24
  • 1
    Жаль. Я на самом деле пытаюсь сделать функции словаря имеющими право на отображения, т.е. выставить поведение объекта во многом как я сделал бы с локальным для сценария функциональным объектом. Также я не вижу проблемы, почему Vim предотвратил бы такую схему доступа. –  Tim Friske 16.12.2012, 11:21

Теги

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