Как последовательно запускать командную строку Vim для создания отображающейся работы в каком-либо режиме?

Существует стандартная функция для синхронизации данных (и метаданные) одного файла: fsync. Нет никакой стандартной или общей команды оболочки для доступа к нему, но можно использовать perl's sync метод в IO::Handle:

perl -MIO::File -e 'new IO::File($ARGV[0], "r+")->sync()' filename

Нет никакой стандартной или общей команды функции или оболочки для синхронизации всего одного раздела.

В недавних системах Linux, существует syncfs системный вызов (представленный в ядре 2.6.39, и выставленный начиная с glibc 2.14). Я не думаю, что этот системный вызов выставляется в coreutils или util-linux все же.

5
07.01.2013, 03:24
2 ответа

Тем временем я придумал следующий подход:

noremap <script> <unique> <SID><\O> <Nop>
inoremap <script> <unique> <SID><\O> <C-\><C-O><SID><\O>
cnoremap <script> <unique> <SID><\O> <C-\><C-N><SID><\O>
noremap <script> <unique> <SID><\N> <Nop>
noremap! <script> <unique> <SID><\N> <C-\><C-N><SID><\N>

Для каждого режима Vim <SID><\O> сочетание клавиш отображается для соответствующего выхода (например. <C-\><C-O>) от текущего режима Vim (например, режим вставки) к его нормальному режиму. Правая сторона каждого отображения заканчивается в его левой стороне (например. <SID><\O>) чтобы рекурсивно попытаться выйти снова. Локальное для сценария (<script>, <SID>) остановки рекурсии как скоро последняя последовательность клавиши выхода достигают нормального режима Vim в который <SID><\O> сочетание клавиш ни на чем не отображается (<Nop>).

Аналогично <SID><\N> сочетание клавиш отображается на не, только выходят однажды (<SID><\O>) от, например, режим вставки прежде, чем возвратиться назад, но постоянно остаются в нормальном режиме.

С помощью вышеупомянутых определений я отобразился <F1> и <S-F1> функциональные клавиши следующим образом:

noremap <script> <unique> <expr> <F1> <SID>ToggleHelp(':<C-U>help', '<SID>')
noremap! <script> <unique> <expr> <F1> <SID>ToggleHelp(':<C-U>help', '<SID>')
noremap <script> <unique> <expr> <S-F1> <SID>ToggleHelp(':<C-U>helpgrep', '<SID>')
noremap! <script> <unique> <expr> <S-F1> <SID>ToggleHelp(':<C-U>helpgrep', '<SID>')
function! s:ToggleHelp(cmd, sid)
  ToggleVar s:HelpCwordOn
  let a=s:HelpCwordOn ? '<cword>' : '<cWORD>'
  return a:sid . '<\O>' . a:cmd . ' ' . expand(a) . ' '
endfunction
command! -bang -nargs=+ ToggleVar call <SID>ToggleVar(<bang>0, <f-args>)
function! s:ToggleVar(bang, var)
  let {a:var}=exists(a:var) ? !{a:var} : !a:bang
endfunction

Вместо того, чтобы иметь <F1> ключ просто открывает справку Vim's в новом окне, это запускается :help команда с внутренним словом (<cword>) под курсором. Последовательно нажимающим <F1> ключ, каждый переключается на внешнее слово (<cWORD>) и переключатели назад снова.

Эти 4 отображения от варианта использования выше могли также быть определены следующим образом для не повторения себя; т.е. хранение его "сохнет":

let a='noremap'
let b='<script> <unique> <expr>'
let c='<F1>'
let d='<S-F1>'
let e='<SID>ToggleHelp('':<C-U>help'
let f='grep'
let g=''', ''<SID>'')'
let h=b . ' ' . c . ' ' . e . g
let i=b . ' ' . d . ' ' . e . f . g
exec a . ' ' . h
exec a . '! ' . h
exec a . ' ' . i
exec a . '! ' . i
0
27.01.2020, 20:42

Когда следующее не работает?

nnoremap <F6> <ESC><ESC>:command<CR>
2
27.01.2020, 20:42

Теги

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