Câu trả lời:
Có thể có những cách khác, nhưng cách tiếp cận này cho phép bạn làm nhiều hơn là thêm một đoạn, đó là lý do tại sao tôi có xu hướng sử dụng nó khá nhiều.
Chạy :Gdiff
lệnh. Nó sẽ mở một phần tách với phiên bản của tệp hiện tại đang nằm trong chỉ mục ở bên trái / trên cùng của cửa sổ gốc.
Trong khi ở cửa sổ gốc (bên phải hoặc dưới cùng), hãy thực hiện lựa chọn trực quan các thay đổi bạn muốn git add
.
Chạy :diffput
lệnh, có thể hoạt động trên một phạm vi. ( dp
khóa không hoạt động ở chế độ Visual.)
Đóng cửa sổ thứ hai lưu thay đổi để cập nhật tệp trong chỉ mục. Tại đây bạn có thể chỉnh sửa nó theo cách bạn muốn trước khi lưu, nó không phải khớp chính xác với phiên bản gốc hoặc phiên bản mới của tệp.
Lưu ý rằng :diffput
không phải lúc nào bạn cũng có thể cung cấp cho bạn những gì bạn mong đợi tùy thuộc vào cấu trúc của các thay đổi (đặc biệt nếu bạn chỉ cam kết một phần của khối thay đổi liền kề). Vì vậy, đừng quên xác nhận cam kết. Trong hầu hết các tình huống thực tế, nó hoạt động tốt mặc dù.
Vimcasts có một loạt tuyệt vời trên Fugitive.vim . Tập Fugitive.vim - làm việc với chỉ số git sẽ hữu ích nhất cho câu hỏi của bạn.
Bạn có thể sử dụng :Gdiff
để giai đoạn chỉ một phần của một tập tin. Chạy :Gdiff
sẽ hiển thị cho bạn tệp hiện tại "diff-ed" với giai đoạn / chỉ mục. Bạn chỉ có thể sử dụng lệnh diff Vim của ( dp
, do
, :diffput
, và :diffget
) để di chuyển hunk lên sân khấu / index. Sau đó, bạn viết tập tin giai đoạn / chỉ mục giống như bất kỳ bộ đệm nào khác, :w
/ :x
.
Như bạn đã hỏi cụ thể về các giải pháp sử dụng các plugin khác, tôi sẽ lưu ý rằng bạn cũng có thể thực hiện các lựa chọn trực quan bằng vimagit , đó là một plugin Git (dựa trên plugin Magit phổ biến của trình soạn thảo khác ) tập trung vào xem, dàn dựng và cam kết thay đổi.
Để tạo giai đoạn lựa chọn trực quan bằng Vimagit:
Chạy :Magit
lệnh để mở bộ đệm mới hiển thị tất cả các khối đã thay đổi trong kho lưu trữ của bạn (không chỉ trong một tệp),
Xác định vị trí các dòng bạn muốn giai đoạn và thực hiện visual
lựa chọn của bạn ,
Nhấn vào ánh xạ "giai đoạn" : S
.
vim-gitgutter
Giai đoạn hoàn thành Hunk
<Leader>hs
hoặc là:GitGutterStageHunk
Phần Giai đoạn của một Hunk chỉ bổ sung (kể từ 8/2019)
Chế độ trực quan
{Visual}<Leader>hs
:'<,'>GitGutterStageHunk
'<,'>
luôn được chèn cho bạn)Phạm vi
:42,45GitGutterStageHunk
Phần sân khấu của bất kỳ Hunk nào qua Cửa sổ xem trước (kể từ 8/2019)
<Leader>hp
:wincmd P
<Leader>hs
hoặc:GitGutterStageHunk
Đã cập nhật: 17.8.2019 do các cam kết gần đây bc1d28d và b036fcf
:Gstatus
+D
để làm tương tự với fugitive. Bằng cách này, tôi cũng có thể chọn tệp tôi đang hoạt động trong danh sách các tệp đã được sửa đổi.