Предотвратить удаление x в Vim - PullRequest
2 голосов
/ 27 февраля 2011

Мне очень нравится комбинация клавиш zx в Vim (она сворачивает все, кроме активной области текста).Тем не менее, это кажется довольно опасной комбинацией клавиш.Нажатие x на сгибе удаляет сгиб.Таким образом, если z опущен или захвачен какой-либо другой предшествующей комбинацией клавиш, становится довольно легко случайно удалить текст в сгибе, нажав x самостоятельно.

Учитывая, что dd также можно использовать для удаления текста в сгибе, было бы хорошо, если бы я мог отключить x как инструмент удаления сгиба.

  • Как можно отключить x как удаление сгибаключ?

Ответы [ 2 ]

4 голосов
/ 27 февраля 2011

Вы можете отключить x на сгибах только с помощью следующего простого <expr> сопоставления:

nnoremap <expr> x ((foldclosed('.')==-1)?('x'):('zx'))

В отличие от функции @Eelvex, оно сохраняет все функции x и также переназначает x какбеги по сгибам до zx.

2 голосов
/ 27 февраля 2011

1. Отключить x

Вы можете полностью отключить x (или любую другую клавишу / комбинацию) с помощью:

nmap x <nop>

(x, кстати, такой же, как dl, а не dd)

Закрытая складка всегда включается целиком при использовании операторов, поэтому (afaik) невозможно отключить x только для удаления складки.

2. Автоматически открывать складку

Возможный обходной путь - автоматически открывать складку, когда вы «на ней», поэтому x удалит только один символ (как обычно):

set foldopen=all

но это делает более громоздким навигацию по коду.

3. Remap x

Если вы не против отключить некоторые функции x (например, удалить в регистр), это также сделает работу:

function Foldx()
  if foldclosed(".") == line(".")
    echo "Watch it!"
  else
    call feedkeys("dl")
    echo "x"
  endif
 endfunction

 nmap x :call Foldx()<cr>
...