Могу ли я переназначить ctrl-j и ctrl-k в vim?

Не преобразовывайте строку версии в целое число. Сравните струны.

Это немного излишне для вашего варианта использования, но вот функция оболочки, которая сравнивает типичные строки версий. Он следует подмножеству правил сравнения версий Debian :

  • Версии сравниваются по частям. Каждый блок состоит из максимальной последовательности символов, которая либо полностью состоит из цифр, либо не содержит цифр.
  • Нецифровые последовательности сравниваются в лексикографическом порядке.
  • Последовательности цифр сравниваются в соответствии с десятичным значением. В частности, ведущие нули не имеют значения.

Обратите внимание, что последняя точка: 1.01 считается равной 1.1 . Это цена, которую нужно заплатить за 1,1 и 1,9 , которые будут считаться меньшими, чем 1,10 .

Для этого кода требуется тире, bash, ksh или zsh. Чтобы использовать его с другими оболочками, такими как BusyBox sh, замените вызовы [" STRING1 " \> " STRING2 "] на expr "a STRING1 "\>" a STRING2 ".

version_ge () (
  version1="$1" version2="$2"
  while true; do
    prefix1="${version1%%[0-9]*}" prefix2="${version2%%[0-9]*}"
    if [ "$prefix1" \> "$prefix2" ]; then return 0; fi
    if [ "$prefix2" \> "$prefix1" ]; then return 1; fi
    version1="${version1#"$prefix1"}" version2="${version2#"$prefix2"}"
    prefix1="${version1%%[!0-9]*}" prefix2="${version2%%[!0-9]*}"
    version1="${version1#"$prefix1"}" version2="${version2#"$prefix2"}"
    case "$prefix2" in
      0*[!0]*) prefix2="${prefix2##"${prefix2%%[!0]*}"}";;
      *[!0]*) :;;
      *) return 0;;
    esac
    case "$prefix1" in
      0*[!0]*) prefix1="${prefix1##"${prefix1%%[!0]*}"}";;
      *[!0]*) :;;
      *) return 1;;
    esac
    if [ "${#prefix1}" -gt "${#prefix2}" ]; then return 0; fi
    if [ "${#prefix1}" -lt "${#prefix2}" ]; then return 1; fi
    if [ "$prefix1" \> "$prefix2" ]; then return 0; fi
    if [ "$prefix2" \> "$prefix1" ]; then return 1; fi
  done
)

4
11.12.2016, 22:31
2 ответа

Почти готово. Вам нужно добавить эти строки в ваш .vimrc :

nnoremap <C-j> <C-d>
nnoremap <C-k> <C-u>

Когда я хочу узнать, как работает vim, я считаю полезным : help .

3
27.01.2020, 20:49

С ними сначала нужно разгруппировать:

Например, для CTRL+J поместите следующую строку в файл '.vimrc':

let g:BASH_Ctrl_j = 'off'
6
27.01.2020, 20:49

Теги

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