Чому курсор рухається до початку рядка після <Esc>?


12

Я помітив, редагуючи рядок у файлі .txt у режимі вставки, курсор переміститься до початку рядка після запису, використовуючи послідовність клавіш:

<esc>:w

Я хотів би змінити цю поведінку таким чином, щоб курсор залишався в позиції після: write. Чи можливо це? Мені не потрібен курсор, щоб він залишався у режимі вставки, я просто хотів би, щоб він зберігав останню позицію після запису.

Я використовую gVim 7.4 на windows. Мій .vimrc дуже базовий, я не вважаю, що жодна з моїх налаштувань заважає цій поведінці. Я також видалив пошук mswin.vim та example.vim з мого .vimrc (у комплекті з офіційною програмою встановлення Windows vim.org).

Прочитавши коментарі нижче, я знову переглянув проблему і зрозумів, що курсор ковзає лише вліво після запису на рядках, які повністю складаються з пробілу білого пробілу. Іншими словами, курсор ковзає лише в крайній частині зліва після esc-: w, коли рядок є відступним відступом, крім пробілів немає інших символів . .Vimrc обробляє поведінку відступів з цими налаштуваннями:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

Отже, новий рядок, створений під відступною лінією, буде містити 4 пробіли білого кольору як перші 4 пробіли лінії (які я хочу зберегти). Натискаючи клавішу 'esc', курсор ковзає в крайній лівій частині буфера.

Чи є спосіб зберегти позицію курсора при натисканні на 'esc' для повернення до звичайного режиму на лінії, що складається з пробілів білого кольору (як відступ)?


3
Я ніколи не помічав такої поведінки у Vim на будь-якій платформі ... Що станеться, якщо ви запустили gVim на зразок: gvim -u NONE -U NONE(ви можете використовувати cmd.exe або зробити ярлик)? Це запобіжить завантаження файлів (g) vimrc.
Мартін Турной

1
Це ваш повний файл vimrc? Моє перше підозру в тому, що autocmd у вашому файлі vimrc видаляє пробіли пробілу. Чи змінюється поведінка при запуску gVim без жодного файлу vimrc (див. Вище коментар)?
Мартін Турной

Наведене вище не є моїм повним .vimrc, є й інші налаштування. Запуск gVim без .vimrc (: ім'я скриптів не містить .vimrc чи .gvimrc) вирішує мою проблему. Ви абсолютно праві, мені потрібно переглянути мій .vimrc або щось інше, що може спричинити це.
Джим

Мабуть, таке усунення пробілів у нових рядках є бажаною поведінкою, я читаю тут, це означає, щоб зберегти файл чистого простору.
Джим

Це про відкриття нових рядків ... Не про запис у файл?
Мартін Турной

Відповіді:


11

Дивлячись на документацію для автоінтенденту, є відповідь щодо того, як і як це робити. :help 'autoindent':

Скопіюйте відступ з поточного рядка під час запуску нового рядка (набравши <CR> в режимі Вставка або при використанні команди "o" або "O"). Якщо в новому рядку ви нічого не вводите, крім <BS>або, CTRL-Dа потім введіть <Esc>, CTRL-Oабо <CR>, відступ знову видаляється. Переміщення курсору на інший рядок має той же ефект, якщо прапор "I" не включений у "cpoptions".

Іншими словами, якщо ви хочете, щоб він не втратив відступ, введіть щось, а потім поверніть його назад, перш ніж натиснути Esc, і провідний пробіл залишиться.

Крім того, якщо ви просто хочете повернутися на рівень відступу, коли ви повертаєтесь до режиму вставки та використовуєте 'cindent'також, використовуйте Shift-Sзамість цього i, що очистить (вже порожній) рядок та почніть з відповідного рівня відступу. Це не таке загальне рішення, як це вище, але я вважаю за краще це, коли я пишу код C, щоб мої файли насправді не зберігалися лише рядками з пробілом.


Це остаточна відповідь на моє запитання з оригінальної документації. Дякую за резюме та розповідь - я б не думав вивчати: h autoindent для цієї інформації. Дякую також @Carpetsmoker за дискусію, яка веде до вирішення.
Джим

Це вирішило проблему, з якою в мене було перезаписано o і O, щоб не виходити з режиму вставки, а зберегти відступ. Це можна зробити, зробивши це nnoremap o o <BS><Esc><DEL>, іnnoremap O O <BS><Esc><DEL>
Макс Коплан

Дуже дякую!
Макс Коплан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.