Làm thế nào để tìm và thay thế trong Vim mà không phải gõ từ gốc?


53

Tôi muốn tối ưu hóa quy trình "tìm và thay thế" của mình trong Vim. Đó là điều tôi thường làm, vì tôi chắc rằng hầu hết các bạn cũng vậy. Thông thường một cái gì đó dọc theo dòng - sao chép một khối và thay đổi tên của một biến ở một vài nơi. Tôi biết, tôi biết, điều đó có thể kích hoạt phản xạ "tại sao bạn sao chép và dán mã", nhưng chúng ta đừng đi vào con đường đó ... Có rất nhiều trường hợp sử dụng hợp lệ :)

Tôi nhận thức rõ về các lệnh tìm kiếm và thay thế: :shoặc :%stôi không thích chúng. Nó buộc tôi phải gõ cả tên biến đầy đủ mà tôi đang tìm kiếm và tôi đang thay đổi nó thành gì. Có lẽ có một cách tốt hơn để sửa số lượng gõ bằng :%s? Tôi thường sử dụng tên biến mô tả dài, vì vậy đó thực sự là một công cụ đối phó với tôi. Tôi cũng không thích cách gõ một tên biến từ đầu dễ bị lỗi chính tả và có thể tiêu tốn thời gian và trí tuệ để săn lùng lỗi chính tả. Tôi rất thích gõ nó một lần, sau đó sao chép và dán để tránh điều này hoàn toàn nếu có thể.

Quy trình công việc hiện tại của tôi sử dụng một số kết hợp của chuyển động / yank / select / search / put để di chuyển xung quanh tệp và thay thế từng cái một. Nó không tuyệt vời nhưng có lợi ích là tránh gõ tên đầy đủ. Tôi có thể chỉ cần nhập một vài chữ cái đầu tiên bằng /hoặc sử dụng một lệnh di chuyển khác (ví dụ fx) tùy thuộc vào những gì xung quanh và sau đó nhấn veđể chọn toàn bộ từ. Tôi cũng không bận tâm rằng tôi phải lặp lại cho mọi trường hợp. Tôi không bao giờ thực hiện thay thế đầy đủ mà không xác nhận từng thay đổi. Nhưng sẽ tốt hơn nhiều nếu tôi có thể lặp lại hành động thay thế bằng một lần nhấn phím (điều mà tôi không thể làm với phương pháp này). mỗi thay thế thường là một cái gì nđó vesau đó p(hoặc thậm chí tệ hơn "0p)

Có cách nào nhanh hơn không?


1
.lặp lại "khối lệnh" cuối cùng (không chắc chắn về thuật ngữ chính xác. ví dụ: di chuyển + hành động + văn bản. ví dụ: cwtoto<Esc>(thay đổi từ con trỏ sang cuối từ bằng "toto"), c/foo<enter>bar<Esc>(thay đổi từ con trỏ sang trước " foo "và thay thế bằng" bar "). sau đó bạn có thể di chuyển (bằng con trỏ, hjkl hoặc số + hjkl (thực hiện n lần), G (đi đến cuối tệp), / cái gì đó (đi ngay trước" một cái gì đó "), v.v.) và sau đó nhấn .để làm lại" khối lệnh "tương tự
Olivier Dulac

Tôi sử dụng điều này khá một chút! Tuy nhiên, nó không hoạt động nếu bạn muốn kéo một từ và sau đó thay thế một từ khác bằng nhiều nơi. Đó là trường hợp sử dụng chính mà tôi gặp vấn đề và đi một cái gì đó như thế n ve "0p. Thật không may, không thể được sao chép chỉ với một.
Joel

5
n ce ctrl-r 0 <esc> n.n.n.n.n.n.
Giàu

@Joel bạn cũng có thể ghi lại một macro (qa sau đó mọi thứ bạn muốn, sau đó q: tạo macro a), sau đó sử dụng: @a để phát lại nó (và, như thường lệ, 134 @ a để thực hiện 134 lần). macro có thể xây dựng công phu khi cần thiết (ví dụ: tìm thứ gì đó, di chuyển đến nơi thích hợp, sau đó đổi từ đó, sau đó chuyển đến vị trí thích hợp để có thể được gọi lại ở vị trí tốt hơn)
Olivier Dulac

1
Tôi đã học được nhiều thủ thuật VIM hữu ích hơn từ câu hỏi này so với bất kỳ câu hỏi nào khác trên trang web. Cảm ơn bạn!
dotancohen

Câu trả lời:


81

Tôi thực sự có một quy trình công việc khá giống với bạn, (sao chép và dán các khối tương tự nhau, sau đó sử dụng :sđể thay đổi tên biến) đặc biệt là khi tôi viết nhiều dòng tương tự ngoại trừ biến chúng sử dụng. Nhưng có một vài điều tôi làm mà bạn có thể thấy hữu ích.

Những điều vim chung

  1. Điều đầu tiên sẽ giúp bạn là nhận ra rằng :s//foo/gsẽ điền vào bất kỳ cụm từ tìm kiếm nào bạn sử dụng cuối cùng và thay thế bằng foo . Điều đó một mình có thể tiết kiệm rất nhiều thời gian, nhưng khi bạn kết hợp nó với lệnh dấu hoa thị (tìm kiếm từ dưới con trỏ hiện tại), nó sẽ tiết kiệm hàng tấn thời gian. Ví dụ, để thay đổi tất cả foothành spam, thay vì làm

    :%s/foo/spam/g
    

    Yêu cầu bạn nhập cả foo và spam (có thể là biến dài), bạn chỉ cần điều hướng đến foo và thực hiện:

    *:%s//spam/g
    

    Bằng cách này, bạn có thể nhanh chóng lấy tên của biến bạn đang thay đổi bằng cách tìm kiếm nó, sau đó bạn sẽ không cần phải nhập nó. Điều này cũng sẽ làm việc tốt với quy trình sử dụng hiện tại của bạn nrất nhiều. Nó cũng hữu ích để có được hlsearch, bởi vì sau đó bạn có thể biết được các biến bạn đang thay thế ở đâu.

    (lưu ý bên: Lệnh dấu hoa thị sẽ thêm ranh giới từ, nghĩa là \<\>xung quanh từ bên dưới con trỏ. Nếu bạn không muốn điều này, hãy sử dụng g*thay thế.)

  2. Sẽ tốt hơn nhiều nếu tôi có thể lặp lại hành động thay thế bằng một lần nhấn phím

    Bạn có thể sử dụng @:để làm lại lệnh thay thế cuối cùng. Điều đó thật tuyệt nếu bạn muốn thực hiện một :slệnh trên nhiều dòng, nhưng không phải tất cả chúng :%sđều không hoạt động. Một lựa chọn khác là cờ xác nhận, tức là :%s///gc. Điều này sẽ cho phép bạn gõ yhoặc ntrên mỗi lần xuất hiện để quyết định xem bạn có muốn thay thế nó hay không.

    Như Desty đã chỉ ra , bạn cũng có thể thực hiện &để chạy lại lệnh thay thế cuối cùng, nhưng lưu ý rằng điều này sẽ không giữ các cờ của bạn (chẳng hạn như globalhoặc confirm). Cho dù đó là tốt hay xấu phụ thuộc vào ý kiến ​​cá nhân của bạn. Nếu bạn muốn sử dụng cái này nhưng nó cũng giữ cờ của bạn, bạn có thể làm

    nnoremap & :&&<cr>
    
  3. Nếu bạn muốn thay đổi mọi lần xuất hiện trong một khối, nhưng không phải mọi trận đấu trong tệp, bạn luôn có thể sử dụng lựa chọn trực quan của khối, sẽ điền vào

    :'<,'>
    

    để thay thế của bạn, mà giới hạn nó vào dòng bạn đã chọn. Khi kết hợp với phương pháp dấu hoa thị, tôi thấy điều này cực kỳ hữu ích. Ngoài ra, nếu bạn đang thực hiện nhiều lệnh thay thế trên cùng một khối dòng, bạn có thể sử dụng gvđể chọn lại cùng một dòng để thực hiện một lệnh khác. (cho dù đó là một :substitutelệnh bình thường)

    Nếu bạn thực hiện một lệnh thay thế khác, bạn không cần phải chọn lại các dòng tương tự, bởi vì :'<,'> vẫn sẽ hoạt động trên cùng một dòng. Tuy nhiên, nó thuận tiện hơn để gõ

    gv:s
    

    thay vì

    :'<,'>s
    

Plugin / ánh xạ tôi thích

  1. Tôi có ánh xạ sau trong .vimrcđó mở rộng cách tiếp cận dấu hoa thị để tôi chỉ phải gõ tên mong muốn mới:

    "(R)eplace all
    nnoremap <leader>r yiw:%s/\<<C-r>"\>//g<left><left>
    

    Để sử dụng điều này, chỉ cần đặt con trỏ của bạn vào từ bạn muốn thay đổi và nhập <leader>rNewVarName<cr>và bạn đã hoàn tất. Lưu ý rằng điều này sẽ thay thế tất cả các trận đấu mà không cung cấp cho bạn một tùy chọn để xác nhận chúng, vì vậy bạn có thể không thích nó nhiều như vậy. Tất nhiên, bạn chỉ có thể thay đổi nó thành

    nnoremap <leader>r yiw:%s/\<<C-r>"\>//gc<left><left><left>
    

    Để cho phép tùy chọn xác nhận.

    chỉnh sửa : Theo sau câu trả lời của Massbình luận của RCorre , bạn cũng có thể viết điều này dưới dạng

    nnoremap <leader>r :%s/\<<C-r><C-w>\>//g<left><left>
    

    Mà có lợi thế giữ cho đăng ký không tên của bạn giống nhau.

  2. Ví dụ: nếu bạn đổi tên các nhóm biến tương tự

    fooSuffix
    PrefixFoo
    foo1
    SHOUTINGFOO
    

    đến

    barSuffix
    PrefixBar
    bar1
    SHOUTINGBAR
    

    nó có thể là một nỗi đau để thay thế tất cả chúng một cách riêng lẻ. Đây là nơi tpope / vim-abolish có ích. Bạn có thể thay thế tất cả những thứ này trong một lệnh bằng:

    :%S/foo/bar/g
    

    và nó chăm sóc viết hoa cho bạn.

Những thứ này sẽ giúp bạn rất nhiều, nhưng hãy cho tôi biết nếu có bất cứ điều gì về những cách tiếp cận này mà bạn không thích hoặc cảm thấy thiếu. Tôi rất vui khi nói về nhiều cách tiếp cận hơn. :)


Đề nghị đọc:


Oh tôi chỉ học được một số điều ở đây. Đẹp! Một cách tiếp cận khác bạn có thể thực hiện là <leader>rc(hoặc cr) để thêm /cvào cuối. Ngoài ra, tôi đã set gdefaultthiết lập, bởi vì tôi gần như không bao giờ muốn thay thế một kết quả duy nhất, vì vậy nó sẽ chỉ là yiw:%s/\<<C-r>"\>//<left><left>
Wayne Werner

2
Thật là một câu trả lời tuyệt vời!
Scott Lundberg

2
Nếu bạn sử dụng ctrl+r-ctrl+wtrong ánh xạ (như được đề xuất bởi @Mass) thì nó sẽ hoạt động tương tự nhưng sẽ không gây rối với đăng ký yank của bạn (có thể hoặc không thể mong muốn)
RCorre

1
Một điều cần nhớ khi làm việc với các khối văn bản mà bạn tô sáng (trước khi cắt / kéo, v.v.) là bạn có thể nhập gv ở chế độ bình thường để làm nổi bật lại văn bản được tô sáng cuối cùng.

1
Tôi đã viết plugin github.com/hauleth/sad.vim hoạt động tương tự như phương pháp 2. hovewer cho phép bạn sử dụng .để thực hiện các thay thế tiếp theo.
Hauleth

20

Họ c_CTRL-Rbản đồ có thể cải thiện quy trình làm việc của bạn khá nhiều:

  1. Bạn không cần phải nhập tên biến khi sử dụng :s/, chỉ cần sử dụng CTRL-R CTRL-Wđể chèn từ dưới con trỏ vào dòng lệnh (hãy cẩn thận: điều này không thoát khỏi các ký tự đặc biệt, giống như *).

  2. Sau khi thực hiện một thay đổi nhỏ bằng cách sử dụng ce, bạn có thể tìm kiếm từ cũ bằng cách sử dụng / CTRL-R -. Sau đó sử dụng .để lặp lại thay đổi.

  3. Nếu bạn cần thay đổi mẫu tìm kiếm CTRL-R /sẽ đặt tìm kiếm hiện tại vào dòng lệnh.

  4. Cuối cùng, bạn có thể đặt nội dung của bất kỳ đăng ký nào bằng cách sử dụng CTRL-R {register}


Điểm tốt! Tôi luôn quên về Ctrl R. Tôi sẽ xem liệu tôi có thể làm việc đó không.
Joel

2
Đáng nói cụ thể Ctrl-R /? Tôi sử dụng điều này khá thường xuyên trong :scác lệnh nếu tôi muốn sử dụng cụm từ tìm kiếm gần như nhưng không hoàn toàn giống với cụm từ trước đó.
Giàu

12

Có một vài phương pháp nữa (thật ngạc nhiên!) Chưa được đề cập.

Sử dụng gnlệnh

gnhoạt động giống như nlệnh, ngoại trừ việc nhảy vào trận đấu, nó sẽ chuyển sang chế độ trực quan, với toàn bộ trận đấu được chọn.

Vì vậy, để thay đổi một từ (hoặc bất cứ điều gì bạn có thể khớp với một biểu thức thông thường!) Trước tiên hãy tìm từ 1 , sau đó nhấn cgntheo sau bởi văn bản bạn muốn thay thế cho khớp và Esctrở về chế độ bình thường.

(Bạn đề cập rằng đôi khi văn bản thay thế bạn muốn sử dụng được lưu trữ trong "0thanh ghi yank - lưu ý rằng bạn có thể nhanh chóng nhập nội dung này mà không phải nhập lại bằng cách nhấn Ctrl+R0trong chế độ chèn.)

Sau đó, bạn có thể chuyển sang trận đấu tiếp theo lặp lại thay đổi với một lần .nhấn phím!

Nếu có bất kỳ nơi nào bạn không muốn thay thế, chỉ cần nhấn unđể hoàn tác thay đổi và chuyển sang trận đấu tiếp theo.

1: mau lẹ hơn bằng cách sử dụng những gợi ý khác trên trang này như *, Ctrl+RCtrl+Wvv Xem thêm bình luận Peter Rincker của để biết thêm gợi ý về cách ban đầu cư tìm kiếm của bạn.

Sử dụng chọn chế độ

(Tôi đã học được điều này từ bài đăng của romainl trên subreddit vim . Tôi không biết liệu anh ấy đã tự phát minh ra nó hay chỉ là truyền nó.)

Chế độ chọn giống như chế độ trực quan, ngoại trừ nếu bạn bắt đầu nhập văn bản đã chọn sẽ được thay thế ngay lập tức bằng nội dung bạn nhập (như cách lựa chọn hoạt động trong hầu hết các trình soạn thảo khác).

Do đó, bạn có thể sử dụng bộ ba ánh xạ này để thực hiện tìm / thay thế rất nhanh, bạn có thể thay đổi tệp giữa, nếu cần:

nnoremap § *``gn<C-g>
inoremap § <C-o>gn<C-g>
snoremap <expr> . @.

Ánh xạ chế độ bình thường : Nhập chế độ chọn với từ gần con trỏ đã chọn.

Sau đó, bạn có thể nhập từ thay thế cho từ đã chọn và ( không cần nhấn Esc) sử dụng:

Chèn ánh xạ chế độ : Nhảy tới trận đấu tiếp theo và vào chế độ lựa chọn.

Sau đó, bạn có thể nhập một thay thế mới hoặc nhấn .để sử dụng:

Chọn ánh xạ chế độ : Nhập lại văn bản được chèn cuối cùng - về cơ bản, lặp lại lần chèn cuối cùng.


Tôi đã đề cập đến gnphương pháp ở cuối câu trả lời của tôi vi.stackexchange.com/a/13696/488 ngày hôm qua vì giá trị của nó! Câu trả lời của bạn có định dạng đẹp hơn nhiều mặc dù.
TankorSmash

1
@TankorSmash Vậy là bạn đã làm! Lưu ý chắc chắn làm thế nào tôi bỏ lỡ điều đó. Lưu ý rằng phương thức thực tế tôi đang sử dụng khác với phương thức của bạn, mặc dù (tôi chỉ gọi gnmột lần) và đó là phương pháp cụ thể, (chứ không phải là gnlệnh) mà tôi ngạc nhiên chưa được đề cập.
Giàu

Tôi sẽ khuyên bạn nên có một số loại của "sao hình ảnh" plugin để sử dụng với gn. Cung cấp cho bạn nhiều tùy chọn tìm kiếm hơn. Bản đồ sao hình ảnh của người nghèo : xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>. Tập Vimcasts liên quan: Hoạt động trên các trận đấu tìm kiếm bằng gn
Peter Rincker

1
Tôi đã tạo plugin sad.vim giúp cho dòng chảy như vậy.
Hauleth

7

Plugin https://github.com/terryma/vim-multipl-cursors đảm nhiệm phần lớn vấn đề này.

Quy trình làm việc của tôi thường như sau:

  1. Di chuyển con trỏ đến từ để thay thế.
  2. Giữ ctrl-ncho đến khi mọi thứ được chọn.
  3. Nhấn cvà bắt đầu nhập thay thế.

Điều tiện lợi ở đây là bạn cũng có thể thực hiện các thao tác phức tạp hơn là chỉ tìm kiếm thay thế, mặc dù tôi thấy rằng nếu bạn đi quá xa, plugin bắt đầu hiển thị một số trục trặc.


4

Một cách khác để làm những việc chưa được đề cập: Bạn có thể sử dụng cửa sổ dòng lệnh (được mở q:ở chế độ bình thường - xem :help q:để biết thêm thông tin), trong đó bạn có toàn quyền truy cập vào các tính năng tự động hoàn thành của Vim ( i_CTRL-N/ i_CTRL-Pvà các i_CTRL-Xchuỗi khác nhau nằm trong số đó).

Trong cửa sổ dòng lệnh, bạn cũng có thể sử dụng các lệnh chế độ bình thường để chỉnh sửa dòng lệnh, ví dụ, có nghĩa là bạn có thể kéo và dán các phần của các lệnh trước đó trong lịch sử dòng lệnh của mình.

Lưu ý rằng con trỏ của bạn sẽ được chuyển đến cửa sổ dòng lệnh khi sử dụng nó, nghĩa là CTRL-R CTRL-Wvà các phương thức tương tự liên quan đến việc chèn văn bản dưới con trỏ sẽ không hoạt động ở đó, không giống như trong dòng lệnh thông thường.


1
Bạn cũng có thể mở cửa sổ dòng lệnh khi bạn đã hoàn thành việc nhập :substitutelệnh của mình bằng cách nhấn<ctrl-f>
Rich

2

Giải pháp cho vấn đề này nằm ở giữa những câu trả lời khác cho tôi:

Giả sử bạn có 6 dòng giống hệt nhau và bạn muốn thay thế 'quả táo' ở giữa hai dòng:

I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days

Những gì tôi làm là:

  1. Tôi bắt đầu văn bản tôi muốn thay thế, 'apple'
  2. Nhấn vđể vào chế độ trực quan
  3. Đi xuống từ cuối cùng tôi muốn thay thế, trong trường hợp này là một vài dòng 2j
  4. :s/<C-R><C-W>/trong đó sử dụng lựa chọn trực quan làm phạm vi cho :s, sau đó chèn từ dưới con trỏ
  5. Tôi nhấn <C-F>mà đưa bạn vào một chế độ nơi bạn có thể chỉnh sửa lệnh của mình như thể nó là một bộ đệm. Vì vậy, bạn có thể sử dụng bất kỳ hoàn thành hoặc bổ trợ nào bạn muốn chọn từ thay thế và bạn đã hoàn thành.

Tất cả trong một dòng, dòng chảy cho điều này sẽ có /apples<CR>2nv/apples<CR>nn:s/<C-R><C-W/oranges<CR>nhưng điều đó có vẻ tồi tệ hơn nó.

Trong trường hợp của bạn, bạn có thể nối thêm lệnh để bỏ qua /cnhững :slệnh bạn không muốn, nếu phạm vi của bạn chứa một vài thứ bạn muốn bỏ qua : :s/<C-R><C-W/orange/c.

Ngoài ra (và có lẽ đơn giản hơn), bạn có thể tìm kiếm toàn bộ từ bạn muốn thay thế, thay đổi ctừ đó, sau đó gn.lặp lại tìm kiếm và áp dụng lại cùng một thay đổi. Nó trông giống như /\<apple\><CR>viwcorange<ESC>gn.gn.gn..ngn.lặp lại nó trên ba, sau đó bỏ qua một thể hiện, sau đó lặp lại nó lần cuối.


Phương pháp bạn mô tả ở cuối không phù hợp với tôi (trong Vim 7.4, được gọi với vim -Nu NONE). Nó chỉ kêu bíp khi tôi nhấn đầu tiên .. Bất cứ ý tưởng tại sao đó là? Trong mọi trường hợp, nó sẽ đơn giản hơn để sử dụng ciwthay vì viwnthay vì gnthực hiện các thay đổi theo cách này.
Giàu

2

Điều này không hoàn toàn liên quan đến câu hỏi, nhưng vẫn sẽ giúp chọn từ để thay thế.

Tìm kiếm tăng dần ( set incsearch) cho phép bạn nhập tiền tố của từ bạn cần tìm và vim sẽ tự động chuyển sang lần xuất hiện đầu tiên của tiền tố khi bạn nhập ngày càng nhiều. Tìm kiếm sẽ được xác nhận nếu bạn nhấn Enter và loại bỏ trên Esc (trong trường hợp sau, con trỏ sẽ nhảy trở lại vị trí trước khi bắt đầu tìm kiếm).

Tuy nhiên, tìm kiếm gia tăng cung cấp thêm một tính năng hữu ích. Khi bạn đã nhập tiền tố của một từ và con trỏ ở đúng vị trí, nhấn <C-L>để thêm các ký tự từ từ dưới con trỏ vào chuỗi tìm kiếm. Điều này cho phép bạn nhập chuỗi thay thế mà hầu như không có tổ hợp phím.

Vì vậy, nếu tôi muốn thay thế someOddVariableNamebằng evenOdderVariableName, tôi

  1. loại /someOddVvà đến nơi xảy ra someOddVariableName;
  2. nhấn và giữ <C-L>cho đến khi someOddVariableNamexuất hiện hoàn toàn trong dòng tìm kiếm;
  3. nhấn Enter để xác nhận tìm kiếm;
  4. :%s//evenOdderVariableName/ghoặc bất cứ lệnh nào thay thế lệnh bạn cần; bạn có thể muốn làm theo các câu trả lời khác ở đây.

2

Bạn có thể đặt tên biến trong bộ đệm trước ( ywđể sao chép một từ), sau đó sao chép-dán nó vào :%sbằng cách nhấn <C-r>".


2

Nếu bạn muốn thay thế một biến trong khối mới (đã dán), tôi có hai đề xuất:

Tự động thay thế

  • Tới dòng đầu tiên của khối mới, nhấn ma. Đây là đánh dấu một vị trí và đặt tên cho nó a.

  • Đi đến dòng cuối cùng của khối mới, nhấn mb. Bây giờ bạn có hai vị trí được đặt tên.

  • Bây giờ thay thế giữa hai dòng, như vậy : :'a,'bs/oldVarName/newVarName/g.

  • Đó là, phạm vi của sự thay thế là giữa hai điểm của bạn.

Cách thủ công

  • Đi đến dòng đầu tiên của khối mới.

  • Sử dụng /oldVarNameđể tìm phiên bản đầu tiên của oldVarName.

  • Thay đổi nó như vậy : cwnewVarName<Esc>, sẽ thay đổi từ thành newVarNamevà nhấn thoát.

  • Sử dụng nđể đi đến trường hợp tiếp theo của oldVarName.

  • Sử dụng .để lặp lại thay đổi cuối cùng (tức là lặp lại điều đó cw).


2

Nhiều câu trả lời khác ở đây đã trình bày các cách được xây dựng để cải thiện quy trình tìm và thay thế nhưng tôi muốn đề cập đến abolish.vim , một plugin của Tim Pope. Nó thay thế trong đó bạn muốn bao quát phạm vi rộng hơn, thường là do các biến thể trong trường hợp hoặc do bạn cần phải xử lý cả hai dạng số ít và số nhiều của một từ.

:S/child{,ren}/adult{,s}/gmột cách chính xác chuyển đổi childđể adult, Childrenđến AdultsCHILDđến ADULT.

Nếu bạn đang xử lý các từ có vỏ lạc đà, bạn cần bao gồm các chữ viết hoa nơi bạn cần chúng trong các từ gốc và từ thay thế.

%:S/wordWrap/textBreak/gxử lý chính xác cả wordWrapwordwrap.


0

Như những người khác đã chỉ, nếu bạn đặt con trỏ lên trên từ của mình, bạn có thể sử dụng họ lệnh Ctrl + r, là Ctrl + r Ctrl + w có lẽ là cách phù hợp nhất để sử dụng.

Tuy nhiên, phương thức đó chỉ hoạt động để chèn một từ (từ bên dưới con trỏ), nhưng nếu có một vài phần văn bản trong bộ đệm mà chúng ta muốn sử dụng thì sao? Khi bạn không thể di chuyển con trỏ của bạn trong dòng lệnh. Cách tốt nhất để làm điều này là sao chép các phần văn bản bạn sẽ cần vào các thanh ghi khác nhau, bạn có thể thực hiện bằng cách thêm tiền tố "{reg_letter} (trích dẫn và chữ cái từ thanh ghi) vào toán tử sao chép. Cách này sẽ có thể chèn các từ khác nhau vào dòng lệnh sau bằng Ctrl + r {reg_letter}. Điều này hơi khó xử nhưng hoạt động.

Nhưng trở lại ý tưởng trước đó, sẽ thật tuyệt nếu chúng ta di chuyển vị trí con trỏ qua bộ đệm trong khi viết một mẫu. Bằng cách đó, chúng tôi có thể "chọn" văn bản từ các vị trí khác nhau bằng Ctrl + r Ctrl + w, vì vậy tôi đã tạo một plugin thực hiện điều đó: EXtend.vim Plugin cũng có nhiều tính năng khác để thực hiện các thao tác thay thế.

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.