У меня есть сопоставление, как показано ниже, чтобы переместить курсор в первый столбец области ввода / обновления (обведен красным) в таблице. И я могу набрать w или ww, чтобы перейти ко 2-й / 3-й колонке, если это необходимо.
noremap <s-F8> 0f\|ew
Сначала он переходит к привязке |, до конца зеленого числа, а затем переходит к следующему слову (может быть точкой, числом или выражением) в таблице, как показано ниже.
Интересно, могу ли я использовать счетчик, указанный перед командой нормального режима, чтобы напрямую перейти ко 2-му или 3-му столбцу с помощью команды 2<s-F8> или 3<s-F8>.
Следующий код не работает, хотя @= помогает отделить счетчик от команды 0.
noremap <s-F8> @='0f\|ew'<cr>
Я изучил ответ Карката в посте Отображение с помощью v: count в vim и сделал это сопоставление:
noremap <expr> <s-F8> '0f\|e' . v:count1 . 'W'
Но он не двигается, если ведется счет. (Он перемещается в столбец 1, если счетчик не ведется.)
Как правильно использовать v:count1 в таком сопоставлении?





Используйте команду :execute STRING, чтобы включить v:count1 в строку:
noremap <silent> <s-F8> :<c-u>exe 'norm 0f\|e' . v:count1 . 'W'<cr>
Примечание: CTRL-U используется для удаления диапазона, который может вставлять Vim.
Для вашей версии <expr> вам понадобится <esc>, чтобы помочь отменить COUNT (что-то вроде CTRL-U):
noremap <silent> <expr> <s-F8> '<esc>0f\|e' . v:count1 . 'W'
Вау! Я не знал, что в этом случае требуется <esc>! Похоже, проблема в этом - что-то вроде "20f |" случайно оказался там (логика Вима). Большое спасибо!
Этот ответ исправляет мою карту. Оба ваших ответа великолепны! Однако, похоже, я не могу "принять" оба здесь ... Чтобы сохранить поток текста, я оставляю ваш первый ответ принятым.
Не бери в голову. Чтобы облегчить сравнение двух версий, я добавляю к этому сопоставлению <silent>.
Потрясающий! Работает как часы. Я очень старался с подходом
<expr>, но он остается сложным. Документ:h map-exprне очень помогает.