В обычном режиме Vim вкладки имеют ширину 1 символ, не выровненную по левому полю.

Это самый левый мой курсор в нормальном режиме.

Вот как это выглядит в режиме вставки.

У меня есть следующие настройки типа файла

au BufNewFile,BufRead *.py
     \ set tabstop=4 |
     \ set softtabstop=4 |
     \ set shiftwidth=4 |
     \ set textwidth=79 |
     \ set expandtab |
     \ set autoindent |
     \ set fileformat=unix |

 au BufNewFile,BufRead *.js, *.html, *.css
     \ set tabstop=2 |
     \ set softtabstop=2 |
     \ set shiftwidth=2 |

 au BufNewFile,BufRead *.go
     \ set tabstop=4 |
     \ set softtabstop=4 |
     \ set shiftwidth=4 |
     \ set noexpandtab |
     \ set smarttab

Это обычно происходит с .go файлы, как я думаю, у меня есть noexpandtab, Но курсор, не идущий в столбец-0 в обычном режиме, выводит меня из себя.

1 ответ

Решение

То, что вы видите, это нормальное поведение Vim. На линии, которая начинается с <Tab> символ, курсор отображается на символе; так как вкладка занимает несколько экранных ячеек (по умолчанию 8), Vim помещает курсор в конец символа (для символов двойной ширины Vim также удваивает символ, но курсор шириной 8 символов, вероятно, будет выглядеть плохо, а может и не технически возможно в терминале) в обычном режиме. В режиме вставки курсор находится между символами, поэтому вы можете расположить курсор раньше (например, с помощью gI) и после (I) вкладка.

средства защиты

Было бы лучше принять это поведение; если вы действительно не можете этого вынести, вот несколько вариантов, которые меняют поведение. К сожалению, у каждого есть свои недостатки и недостатки:

  • С :set list, Vim помещает курсор вперед, как вы хотите. Но вы также увидите выделенные пробелы. Вы могли бы возиться с 'listchars' возможность уменьшить визуальный шум, но тогда вы потеряете эту полезную функцию.
  • С :set virtualedit=allВы можете расположить курсор в любом месте вкладки. Начиная редактирование в середине, он разделяет символ табуляции на пробел до и после. Кроме того, вы можете расположить курсор в любом месте за физическим текстом.
  • С :autocmds, вы можете конвертировать табуляции в пробелы при чтении в буфер и обратно при записи. (Увидеть :help retab-example)
Другие вопросы по тегам