Tôi thích lệnh '.
trong thời gian thực hiện. Từ :help '.
:Ngăn Vim nhớ lại thay đổi
'. `.
[Jump to] vị trí mà sự thay đổi cuối cùng đã được thực hiện. Vị trí ở gần hoặc gần nơi bắt đầu thay đổi.
Ok. Nhưng đây là vấn đề của tôi: Tôi sử dụng một hàm autocmd
để thêm dòng "sửa đổi lần cuối" trong tiêu đề tệp của tôi. Vì vậy, sau mỗi lần viết, '.
không mang lại cho tôi thay đổi cuối cùng "thực sự" của tôi, mà là cho tiêu đề tệp của tôi. Giải pháp hiện tại của tôi là tôi cố nhớ để đánh dấu điểm chỉnh sửa hiện tại của mình bằng ma
, vì vậy tôi có thể 'a
để quay lại. Tôi đôi khi quên, mặc dù, và ngay cả khi tôi nhớ, đó là một vài tổ hợp phím.
Giải pháp lý tưởng của tôi sẽ là một số loại lệnh yêu cầu vim không nhớ chuyển động. Tôi có thể gửi lệnh này trước khi chức năng autocmd
nhảy xung quanh, viết dòng sửa đổi cuối cùng và sau đó hủy bỏ nó sau khi chức năng autocmd
kết thúc. Bằng cách đó, vị trí được liên kết với '.
sẽ không bị thay đổi. Tuy nhiên, tôi mở cho bất kỳ tùy chọn nào khác hiệu quả hơn.
Trong trường hợp bạn muốn xem, đây là những gì autocmd
thực hiện trên :w
.
function! UpdateHeader()
let b:winview = winsaveview()
" This is where I'd put the command to ignore future movements
"The periods concatenate all the arguments into one command.
"Silent! suppresses errors, usually 'pattern not found'
"The 1,6g means search only lines 1 thru 6
"Search for File Name: followed by anything
"'s'ubstitute
"Substitute in 'File Name: ' and the results of the expand command, on the
"current filename
execute "silent! 1," . 6 . "g/File Name:.*/s//File Name: " . expand("%")
execute "silent! 1," . 6 . "g/Last Modified:.*/s//Last Modified: " . strftime("%d-%m-%Y")
" This is where I'd put the command to start remembering movements again
call winrestview(b:winview)
endfunction
Hoàn hảo. Cảm ơn. – ravron
Một lưu ý cho bất kỳ ai cố gắng thực hiện giải pháp này: lệnh 'keepjumps' là cần thiết trong đó * sửa đổi thực tế của văn bản xảy ra * - cụ thể là, trong lệnh': s' được chạy bởi lệnh ': g':' execute " im lặng! 1, ". 6. "g/Tên tệp:. */keepjumps s // Tên tệp:". mở rộng ("%") '. – ravron
Một lưu ý khác: lệnh được viết trong chú thích trước đó sẽ ngăn không cho ''.' được đặt. Tuy nhiên, nó vẫn thêm vào jumplist. Để ngăn chặn * đó *, thêm 'keepjumps' một lần nữa, ngay sau' silent! '. – ravron