2010-09-21 18 views

Trả lời

50

Không trực tiếp, tuy nhiên bạn luôn có thể sử dụng một ánh xạ:

:nnoremap//\v 
:cnoremap %s/ %s/\v 

Thậm chí nếu bạn có thể thiết lập 'rất kỳ diệu' trong cách bạn có thể set nomagic, bạn thực sự không muốn vì nó sẽ phá vỡ khá nhiều plugin trong sự tồn tại.

Sửa

Xem thêm this page.

+1

Điểm tốt về plugin. Bằng cách nào đó tôi đã không nghĩ về điều này. Cảm ơn bạn đã trả lời. – bgaluszka

+0

Tôi đã thêm một liên kết đến một trang wiki có thể hữu ích cho bạn. – DrAl

+15

+1 Cảm ơn. FWIW, mục đích này có vẻ tổng quát hơn: ': cnoremap s/s/\ v'. – FMc

8

EDIT2: Tôi vừa phát hiện ra plugin này, có thể tốt hơn các giải pháp remapping (dường như có một số nhược điểm không thể tránh khỏi; xem bên dưới). Tôi chưa thử nghiệm nó, vì vậy tôi không biết nếu nó hoạt động chính xác như mong muốn.

http://www.vim.org/scripts/script.php?script_id=4849

EDIT3: Tôi đã sử dụng các plugin cho khoảng một năm rưỡi, và tôi thích nó. Nó vẫn can thiệp vào lịch sử tìm kiếm, tuy nhiên (xem dưới đây), và nó cũng phá vỡ incsearch, vì vậy tôi có sau trong cấu hình Vim của tôi:

" Since I use incsearch: 
let g:VeryMagic = 0 
nnoremap//\v 
nnoremap ? ?\v 
vnoremap//\v 
vnoremap ? ?\v 
" If I type // or ??, I don't EVER want \v, since I'm repeating the previous 
" search. 
noremap // // 
noremap ?? ?? 
" no-magic searching 
noremap /v/ /\V 
noremap ?V? ?\V 

" Turn on all other features. 
let g:VeryMagicSubstituteNormalise = 1 
let g:VeryMagicSubstitute = 1 
let g:VeryMagicGlobal = 1 
let g:VeryMagicVimGrep = 1 
let g:VeryMagicSearchArg = 1 
let g:VeryMagicFunction = 1 
let g:VeryMagicHelpgrep = 1 
let g:VeryMagicRange = 1 
let g:VeryMagicEscapeBackslashesInSearchArg = 1 
let g:SortEditArgs = 1 

Tôi đã từng đề nghị Drai của một thời gian, nhưng không tìm thấy nó bực bội trong thực tế vì những hành vi sau đây:

Nếu bạn gõ như sau: /{pattern} :% s // {} thay thế

... sau đó, mà không cần lập bản đồ này, bạn có thể xem những gì bạn nói về để thay thế trước khi bạn thay thế. Nhưng với bản remapping, bạn đột nhiên có s/\v/ thay vì s//; điều này khớp với số eveything trong tệp, điều này rõ ràng là sai.

May mắn thay, chính lệnh s có dạng thay thế sử dụng very magic để tìm kiếm. Vì vậy, đây là những ánh xạ Tôi hiện đang sử dụng trong tôi .vimrc:

nnoremap//\v 
vnoremap//\v 
cnoremap %s/ %smagic/ 
cnoremap >s/ >smagic/ 
nnoremap :g/ :g/\v 
nnoremap :g// :g// 

Lưu ý rằng chỉ lập bản đồ s/ dẫn đến các vấn đề khi cố gắng sử dụng một mô hình kết thúc bằng s; tương tự, ánh xạ g/ sẽ tạo ra sự cố khi sử dụng các mẫu kết thúc bằng g. Lưu ý rằng ánh xạ :g/:g// ngăn Vim hiển thị lệnh ngay lập tức.

EDIT: Thật không may, có vẻ như không phải là phiên bản "ma thuật" của :global, đó là lý do tại sao ánh xạ dường như không cần thiết của :g// được sử dụng để đảm bảo lệnh chung có thể sử dụng mẫu tìm kiếm trước đó.

Một hạn chế khác là các bản sửa lỗi này ảnh hưởng đến lịch sử tìm kiếm. Ví dụ: hãy xem xét sử dụng * để tìm kiếm lần xuất hiện tiếp theo của từ dưới con trỏ.Điều này làm cho Vim tìm kiếm mẫu \<[word]\>, trong đó không phải bắt đầu bằng \v. Nếu không có các sửa đổi được mô tả ở trên, hãy nhập / và nhấn mũi tên lên sẽ nhớ lại mẫu tìm kiếm đó. Với các thay đổi, tuy nhiên, sau khi nhập /, bạn phải xóa tự động chèn \v trước khi nhấn mũi tên lên để gọi lại mẫu đó.

+0

'cnoremap> s /> smagic /' dường như không hoạt động khi tôi chọn phạm vi hình ảnh. Tôi cũng đã cố gắng thoát khỏi khung để 'cnoremap \> s/\> smagic /' nhưng điều đó không hoạt động. –

+0

@DaveKennedy Bạn đã thử plugin chưa? Nó đáng tin cậy hơn nhiều đối với tôi; Tôi đã có rất ít vấn đề với nó. Tôi không còn sử dụng ánh xạ được liệt kê trong khối mã thứ hai nữa. –

Các vấn đề liên quan