1

Я пытаюсь переназначить опцию - Backspace ведет себя в vim в терминальном приложении Mac OS X так же, как в других приложениях Mac.

Он должен выполнить обратное удаление слова, а также удалить все начальные пробельные символы.

Самое близкое совпадение, которое мне удалось найти, это команда db , но она удаляет только начало слова; это не удаляет любые ведущие пробелы.

Вот несколько примеров того, что я пытаюсь выполнить (| - позиция курсора):

test text| here
" After hitting option-backspace:
test| here

test text |here
" After hitting option-backspace:
test| here

high-lighting| text
" After hitting option-backspace:
high-| text

midway throu|gh text
" After hitting option-backspace:
midway|gh text

start |of line
" After hitting option-backspace:
|of line

Сначала я собирался сделать dbdh , но в случае третьего примера это не сработало (символ дефиса не является пробелом, поэтому его следует сохранить).

Есть ли хороший способ сделать это?

РЕДАКТИРОВАТЬ: После некоторого набора текста, я понял, что поведение "удалить ведущий пробел" на самом деле не похож на Mac; на моем Mac нажатие опции - Backspace останавливается на первом несловесном символе , как это делает Vim.

Спасибо, что присоединились ко мне в этом мысленном эксперименте, хотя (:

3 ответа3

0

У меня нет доступа к Mac, но я думаю, что это делает почти, но не совсем то, что вы хотите (он не помещает курсор туда, куда вы указываете в примере два):

" Control-backspace works like control-w:
imap <c-backspace> <c-w>

Просто измените отображение, чтобы использовать опцию вместо контроля.

Вы также можете / нужно сделать:

:set backspace=indent,eol,start

Увидеть:

:help i_ctrl-w
:help 'backspace'
0
test text| here
" After hitting option-backspace:
test| here

test text |here
" After hitting option-backspace:
test| here

Курсор должен быть включен символ, а не между. Так что я не вижу здесь никакой разницы. d?<Space> похоже, делает свое дело, хотя. Или dbx , может быть.

high-lighting| text
" After hitting option-backspace:
high-| text

db работает.

start |of line
" After hitting option-backspace:
|of line

Если курсор находится на пробел, d^. или d^x .

0

Я обнаружил один метод, который почти работает:

imap ^[^? <esc>bdw<insert>

(^[^? это то, что терминал отправляет, когда я нажимаю опцию - Backspace)

При этом курсор перемещается вверх до начала предыдущего слова и удаляет следующее слово, которое также содержит завершающие пробелы.

Как и ожидалось:

test text| here
" After hitting option-backspace:
test| here

Однако есть две проблемы:

high-lighting| text
" After hitting option-backspace:
high|- text
" Expected:
high-| text

test te|xt here
" After hitting option-backspace:
test| here
" Expected:
"test|xt here"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .