удаление вкладок через пробел за раз

#python #tabs #vim

#python #вкладки #vim

Вопрос:

Как мне настроить vim так, чтобы я мог удалять вкладку через пробел за раз, а не всю вкладку целиком? Мне часто хочется сделать это, когда я пытаюсь согласовать несколько тестов для оператора if. В приведенном ниже примере условие 3 выровнено так, как я хочу, а условие 2 отключено на один пробел из-за табуляции.

 if condition1 or 
    condition2 or 
   condition3:
    do something
  

Я использую vim 7.2.108 в OSX 10.6.7, и в моем файле кода есть следующая строка режима:

 # ex: tabstop=4 softtabstop=1 shiftwidth=4 expandtab: 
  

Черт возьми, эта строка режима позволяет мне использовать клавиши со стрелками для перемещения по вкладке через один пробел за раз.

Обновление: Вот изменения, которые я внес в пример файла vimrc из Bram Mooleanar:

 map z :w<cr>
map q :q!<cr>
map m :make<cr>

set expandtab
set shiftwidth=4
set tabstop=4

set bs=2        " backspace over anything in insert mode
set showmatch       " display the matching bracket of the pair
set nowrap      " don't wrap line to fit window
set showmatch       " show matching paren, bracket, or brace
set ruler       " show current cursor position at bottom
set incsearch       " show next match as you type in search pattern
set ignorecase
set smartcase

syntax on       " enable syntax highlighting
  

Ответ №1:

Я бы сказал, поместите это в ваш файл .vimrc:

 set expandtab
  

Который в основном превращает вкладки в пробелы, когда вы нажимаете клавишу tab.

Комментарии:

1. Привет, Dhaivat, начав с чистого vimrc и тестового файла, чтобы попробовать ваше предложение, я обнаружил свою проблему: когда у меня установлен softtabstop, это не позволяло мне удалять вкладку через пробел за раз. Однако, когда я перечитал файл vimrc, который я использовал (пример, написанный Брэмом Муленааром), моя проблема возвращается.

Ответ №2:

Я бы просто нажал x в обычном режиме, чтобы удалить один символ. Я также укажу на отличный скрипт indent / python.vim от Eric McSween. На самом деле это не меняет поведение обратного пробела, но позволяет вам сделать что-то большее в соответствии с PEP8 — используя подразумеваемое продолжение строки Python с использованием круглых скобок. В скрипте приведенный выше код будет выглядеть следующим образом

 if (condition1 or
    condition2 or
    condition3):
    do something
  

Комментарии:

1. Спасибо, Сэм. Я попробую ваши предложения. Даже простое включение условий в скобки решило бы мою проблему.

Ответ №3:

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

 map <F1> s   <ESC>
  

Если вы хотите сделать это в режиме вставки:

 imap <F1> <BS>   
  

* обратите внимание, что после «>» есть три пробела

Комментарии:

1. Спасибо, Сэм. Я не знаю, как мои табуляции и пробелы перепутались, но я поэкспериментирую с этими сопоставлениями клавиш vim.