В обычном режиме 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
Вы можете расположить курсор в любом месте вкладки. Начиная редактирование в середине, он разделяет символ табуляции на пробел до и после. Кроме того, вы можете расположить курсор в любом месте за физическим текстом. - С
:autocmd
s, вы можете конвертировать табуляции в пробелы при чтении в буфер и обратно при записи. (Увидеть:help retab-example
)