Примерно так:
# `time` will give the total time
time parallel -j0 --joblog mylog rclone sync {} NoTDE_Mig1:IC_dbbackup_config_datapump_v00rcfh_iad3p2 ::: /u05/expdpdump/exppdb/dir{1,2}/*.dmp
# the log contains the time per file
cat mylog
В зависимости от ваших дисков вы можете повысить производительность, если не будете выполнять все команды параллельно. Вы ограничиваете количество параллельно выполняемых заданий до 5, заменяя -j0
на -j5
.
Vim не может точно сказать, работает ли оболочка bash внутри его терминала в режиме вставки vi -или в обычном режиме vi -. Фактически, он даже не может сказать, использует ли он режим vi или emacs. Или в некоторые моменты, когда вы запускаете команду внутри bash, даже нет смысла говорить о том, находится ли bash в режиме вставки или в обычном режиме, поскольку технически он не находится ни в том, ни в другом...
Таким образом, для достижения такого рода интеграции, вам нужно, чтобы bash сообщал Vim о том, в каком режиме он находится , или аналогичным образом, чтобы bash интерпретировал привязки клавиш -и вызывал Vim команды из bash при нажатии специальных клавиш .
Лично я думаю, что последнее проще всего сделать привязкой клавиш в bash, так как в последний раз, когда я смотрел, не было действительно надежного способа подключиться к изменению режима из bash или даже надежно определить, когда новая команда была собираются казнить. (В этом смысле zsh кажется намного лучше, чем bash, у него больше хуков, и их, как правило, проще использовать.)
Другая часть, отсутствующая здесь, — это вызов команд Vim из оболочки, работающей внутри терминала Vim. Вы можете сделать это, используя терминал -API , который позволяет вам использовать управляющую последовательность из bash для вызова функции в Vim.
Для привязок bash см. команду bind
. Думаю, вы можете передать ей -m
, чтобы создать привязку для определенного режима (, например, vi -нормальный ), и вы можете использовать -x
для выполнения некоторого кода (или функции )при вводе определенной комбинации клавиш.
Например, это приведет к тому, что<Tab>
(будет таким же, как Ctrl+I )вызывать функцию wincmd_next()
при нажатии в режиме vi
(, что соответствует «нормальному» режиму vi в строке чтения ):
bind -m vi -x '"\C-i": wincmd_next'
Для API терминала Vim можно экспортировать Tapi_wincmd
функцию, которую можно вызывать из оболочки.Затем из bash вы сможете использовать:
echo -ne '\e]51;["call","Tapi_wincmd",["w"]]\a'
Так что просто превратите это в функцию wincmd_next
:
wincmd_next () {
echo -ne '\e]51;["call","Tapi_wincmd",["w"]]\a'
}
Затем вы можете написать соответствующую функцию Vim:
function! Tapi_wincmd(bufnum, arglist)
execute 'wincmd' a:arglist[0]
endfunction
Таким образом, приведенная выше команда bash заставит Vim перейти к следующему окну.
Терминальный API принимает аргументы в формате JSON. По умолчанию только функции с префиксом Tapi_
могут вызываться из API терминала. Таким образом, вы можете решить, сколько и какие конкретные функции и параметры вы хотите предоставить терминальным приложениям из Vim.
Я полагаю, что этих указателей должно быть достаточно, чтобы собрать воедино все необходимое для настройки описанного вами конкретного сценария, который включает переключение окон Vim при нажатии клавиши Tab, но только , когда оболочка запущена. обычный режим vi -.
Альтернативой этому подходу является использование :tnoremap
для перехвата нажатий клавиш всякий раз, когда они отправляются приложению, запущенному на терминале, будь то bash в обычном режиме vi -, bash в vi -вставка режим или другое приложение в целом.
Как вы упомянули в вопросе, вы можете настроить это с помощью:
tnoremap <Tab> <C-w>w
Но это не оставляет вам возможности использовать настоящую вкладку в терминале, что может быть полезно при завершении в режиме vi -insert (или emacs ).
Это можно обойти, сопоставив другое нажатие клавиши для отправки фактической вкладки в терминальное приложение, например, одно из:
tnoremap <S-Tab> <Tab> " Shift-Tab
tnoremap <C-v><Tab> <Tab> " Ctrl-V, Tab
tnoremap <C-P> <Tab> " Ctrl-P