Tại sao con trỏ di chuyển đến đầu dòng sau <Esc>?


12

Tôi đã nhận thấy trong khi chỉnh sửa dọc theo một dòng trong tệp .txt ở chế độ chèn, con trỏ sẽ di chuyển đến đầu dòng sau khi ghi bằng chuỗi phím:

<esc>:w

Tôi muốn thay đổi hành vi này sao cho con trỏ sẽ giữ nguyên vị trí theo sau: write. Điều này có thể không? Tôi không cần con trỏ duy trì ở chế độ chèn, tôi chỉ muốn nó duy trì vị trí cuối cùng sau khi viết.

Tôi đang sử dụng gVim 7.4 trên windows. .Vimrc của tôi rất cơ bản, tôi không tin bất kỳ cài đặt nào của mình can thiệp vào hành vi này. Tôi cũng đã gỡ bỏ nguồn của mswin.vim và example.vim khỏi .vimrc của tôi (như được đóng gói với trình cài đặt windows vim.org chính thức).

Sau khi đọc các bình luận bên dưới, tôi đã xem xét lại vấn đề và nhận ra con trỏ chỉ trượt sang bên trái sau khi viết lên các dòng hoàn toàn được tạo thành từ khoảng trắng ở cuối. Nói cách khác, con trỏ chỉ trượt về phía bên trái khi esc-: w khi dòng là một vết lõm treo không có ký tự nào khác ngoài dấu cách . .Vimrc đang xử lý các hành vi thụt lề với các cài đặt này:

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

Vì vậy, một dòng mới được tạo bên dưới một dòng thụt vào sẽ chứa 4 khoảng trắng ở cuối là 4 khoảng trắng đầu tiên của dòng (mà tôi muốn giữ). Khi nhấn phím 'esc', con trỏ trượt sang bên trái của bộ đệm.

Có cách nào để giữ vị trí con trỏ khi nhấn 'esc' để trở về chế độ bình thường, trên một dòng được tạo thành từ các khoảng trắng ở cuối (như thụt đầu dòng) không?


3
Tôi chưa bao giờ nhận thấy hành vi này trong Vim trên bất kỳ nền tảng nào ... Điều gì xảy ra nếu bạn bắt đầu gVim như: gvim -u NONE -U NONE(bạn có thể sử dụng cmd.exe hoặc tạo một phím tắt)? Điều này sẽ ngăn tải các tập tin vimrc (g) của bạn.
Martin Tournoij 17/2/2015

1
Đó có phải là tập tin vimrc hoàn chỉnh của bạn ? Sự nghi ngờ đầu tiên của tôi sẽ là một autocmd trong tệp vimrc của bạn đang xóa khoảng trắng ở cuối. Hành vi có thay đổi khi bạn khởi động gVim mà không có tệp vimrc nào không (xem bình luận ở trên)?
Martin Tournoij

Ở trên không phải là .vimrc hoàn chỉnh của tôi, cũng có các cài đặt khác. Chạy gVim mà không có .vimrc (: scriptnames không hiển thị .vimrc hoặc .gvimrc) giải quyết vấn đề của tôi. Bạn hoàn toàn đúng, tôi cần xem qua .vimrc của tôi hoặc một cái gì đó có nguồn gốc có thể gây ra điều này.
Jim

Rõ ràng việc loại bỏ các khoảng trắng trên dòng mới là một hành vi đáng mong đợi, tôi đang đọc ở đây nó có nghĩa là để giữ cho tệp sạch khỏi khoảng trắng.
Jim

Đó là về việc mở các dòng mới ... Không phải về việc ghi vào một tập tin?
Martin Tournoij 17/2/2015

Câu trả lời:


11

Nhìn vào tài liệu cho autoindent có câu trả lời là tại sao và làm thế nào để làm việc xung quanh nó. :help 'autoindent':

Sao chép thụt lề từ dòng hiện tại khi bắt đầu một dòng mới (gõ <CR> trong chế độ Chèn hoặc khi sử dụng lệnh "o" hoặc "O"). Nếu bạn không gõ bất cứ điều gì trên dòng mới ngoại trừ <BS>hoặc CTRL-Dsau đó nhập <Esc>, CTRL-Ohoặc <CR>, thụt lề sẽ bị xóa một lần nữa. Di chuyển con trỏ đến một dòng khác có cùng hiệu ứng, trừ khi cờ 'I' được bao gồm trong 'cpoptions'.

Nói cách khác, nếu bạn muốn nó không bị mất thụt lề, hãy nhập một cái gì đó và sau đó xóa lại trước khi nhấn Escvà khoảng trống hàng đầu sẽ vẫn còn.

Ngoài ra, nếu bạn chỉ muốn quay lại mức thụt lề khi bạn quay lại chế độ chèn và cũng đang sử dụng 'cindent', hãy sử dụng Shift-Sthay vì i, sẽ xóa dòng (đã trống) và bắt đầu ở mức thụt lề thích hợp. Đây không phải là một giải pháp chung như giải pháp ở trên, nhưng tôi thích điều này khi tôi viết mã C, để các tệp của tôi không thực sự được lưu với các dòng chỉ có khoảng trắng.


Đây là một câu trả lời dứt khoát cho câu hỏi của tôi từ tài liệu gốc. Cảm ơn về bản tóm tắt và tường thuật - tôi sẽ không nghĩ đến việc xem xét: h tự động cho thông tin này. Cũng cảm ơn @Carpetsmoker đã thảo luận dẫn đến một giải pháp.
Jim

Điều này đã giải quyết một vấn đề mà tôi gặp phải liên quan đến việc ánh xạ lại o và O để không rời khỏi chế độ chèn, nhưng để giữ thụt lề. Điều này có thể được thực hiện bằng cách thực hiện nnoremap o o <BS><Esc><DEL>nnoremap O O <BS><Esc><DEL>
Max Coplan

Cám ơn rất nhiều!
Tối đa Coplan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.