Nasıl olabilir hızla alıntı / unquote kelime ve değişim (örneğin alıntı '
için "
Vim)? Surround.vim eklentisini biliyorum , ama sadece Vim kullanmak istiyorum.
Nasıl olabilir hızla alıntı / unquote kelime ve değişim (örneğin alıntı '
için "
Vim)? Surround.vim eklentisini biliyorum , ama sadece Vim kullanmak istiyorum.
Yanıtlar:
surround.vim en kolay cevabınız olacak. Gerçekten kullanmaya karşı ayarlıysanız, işte neler yapabileceğinize dair bazı örnekler. Mutlaka en verimli değil, ama bu yüzden surround.vim yazıldı.
ciw'Ctrl+r"'
ciw
- İmlecin açık olduğu sözcüğü silin ve ekleme moduna getirin.'
- ilk teklifi ekleyin.Ctrl+r"
- Kaydın içindekileri "
, diğer adıyla son / sil komutunu ekleyin .'
- kapanış teklifini ekleyin.
di'hPl2x
di'
- Tek tırnak içine alınmış kelimeyi silin.hP
- İmleci bir satır sola hareket ettirin (açılış teklifinin üstünde) ve silinen metni alıntıdan önce getirin.l
- İmleci bir konum sağa götür (açılış teklifinin üstünde).2x
- İki alıntıyı silin.
va':s/\%V'\%V/"/g
va'
- Alıntılanan kelimeyi ve tırnak işaretlerini görsel olarak seçin.:s/
- Değiştirmeye başlayın.\%V'\%V
- Yalnızca görsel olarak seçilen bölgedeki tek tırnak işaretlerini eşleştirin./"/g
- Hepsini çift tırnak işareti ile değiştirin.ciw
ve sadece cw
? İlk kafa karıştırıcı ve ikinci işi iyi buluyorum.
ciw
, imlecinizin kelimede nerede olduğuna bakılmaksızın çalışır. cw
yalnızca imleciniz kelimenin başlangıcındaysa çalışır. Bkz :help iw
.
.
komut ile çalışmadığını fark edebilirsiniz . Çalıştırmak için kullanın ciw' Ctrl+r Ctrl+p"
. Daha sonra .
aşağıdaki kelime için istediğiniz gibi davranacaktır: kaydın içeriğini hatırlamak yerine, şu anda kayıtta olanı istediğinizi hatırlayacaktır (açıklaması biraz zor, ama her ikisini de denerseniz, açık olacak) :-))
Tek tırnak kullanarak bir kelime alıntılama
ciw'Ctrl+r"'
Bunu bu şekilde yapmak benim için daha kolaydı
ciw '' Esc P
İşte size yardımcı olabilecek bazı eşlemeler:
:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P
Eşleme değişkeni değişkenini değiştirmediyseniz, eşlemeyi \q"
\q'
veya ile etkinleştirin \qd
. İmlecin altındaki kelimenin etrafına çift tırnak, imlecin altındaki kelimenin etrafına tek tırnak ekler, sırasıyla imlecin altındaki kelimenin etrafındaki tırnak işaretlerini silerler.
map <Leader>' gewi'<Esc>A'<Esc>
benim için .vimrc
satırın sonuna anki konumdan tek tırnak yorum eklemek için dosyanın; bazı MSDOS komut dosyalarını bash'e dönüştürürken bana yardımcı oldu.
:vnoremap <leader>q c""<esc>P
.
Diğer komutlara ek olarak, bir satırdaki tüm kelimeleri çift tırnak içine alır (yorumunuza göre)
:s/\(\S\+\)/"\1"/
veya ters eğik çizgi sayısını azaltmak istiyorsanız \v
, desenin başına (çok sihirli) bir değiştirici koyabilirsiniz
:s/\v(\S+)/"\1"/
:s/\v([a-Z]+)/"\1"/g
Makro yollar!
q kaydına kaydetmek için qve tuşlarına basın q("alıntıları" hatırlamak için kısayol olarak "q" kullanıyoruz).
basın shift+ bakım kelimenin önüne hareket imleç
basın itürü '(tek tırnak)
tuşuna escbasın eve kelimenin sonuna gitmek için tuşuna basın
basın aardından 'tırnak sözcüğü surround tekrar.
Basın escnormal moda girmek.
Son qolarak kayıt q
defterine kaydetmek için tuşuna basın .
Nasıl kullanılır
İstediğiniz step 4
herhangi bir şeyle {bir satır, bir karakter bulana kadar bir kelime vb.) Değiştirebilirsiniz.
Kayıtlı makroyu kalıcı yap
@ q = ' ctrl+ r ctrl+ rq' olsun
kaydet ve çık
dosyalarınızı açın, bazı kelimelere gidin
@q
doğru yaparsanız, kelimelerinizde sihirli şeyler görünmelidir.
Bu adımları sevdiğiniz diğer makrolar için de yapabilirsiniz.
@q w
ve daha sonra n
ile tırnak kullanarak bir sonraki kelimeleri sarabilirsiniz n@j
.
Tek tırnak içine almak (örneğin) ciw'<C-r>"'<esc>
işe yarar, ancak tekrar işe yaramaz. Deneyin:
ciw'<C-r><C-o>"'<esc>
Bu, varsayılan kaydın içeriğini "tam anlamıyla" koyar. Şimdi .
tırnak içine almak için herhangi bir kelimeye basabilirsiniz . Daha :h[elp] i_ctrl-r
fazla bilgi edinmek için adresindeki metin nesneleri hakkında daha fazla bilgi edinin.:h text-objects
Kaynak: http://vimcasts.org/episodes/pasting-from-insert-mode/
ciw'<C-R><C-O>"'<Esc>
.
.
son gerçek aramanın içeriğini yeniden yazacaktır.
VSCodeVim kullanıcıları için şunları yapabilirsiniz
vwS"
"
Sarmak istediğiniz her şeyle .w
Başka bir seçim operatörü ile değiştirebilirsinizviwS'
kelimeyi tek tırnak içinde saran kullanmak zorunda kaldım . Şimdiye kadar en kolay.
viwS"
Bunun için herhangi bir yerleşik vim komutu biliyorum ama kullanan yok r"f'r"
' 've gelen değişikliğine r'f"r'
' komutu "veya. Dan değişikliği' için 'işlerin ilk üzerine çıktığımda r'
, ne olursa olsun karakter cümledeki ile imlecin altında' ve f"
sizi bir sonrakine taşır ".
'r
ve "r
), sadece yazabilirsiniz .
Ve daha tırnak değiştirmek istiyorsanız ;
ve ,
geçen tekrarlamak olarak önceki veya sonraki birine götürür f/F/t/T
sırasıyla aynı yönde veya zıt birinde arama.
Teklif Ekleme
Bu hızlı ve kirli işlevi kullanmaya başladım .vimrc
:
vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>
function! QuickWrap(wrapper)
let l:w = a:wrapper
let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
normal `>
execute "normal " . inside_or_around . escape(w, '\')
normal `<
execute "normal i" . escape(w, '\')
normal `<
endfunction
Şimdi, istediğim her şeyi görsel olarak seçiyorum (tipik olarak viw
- kelimenin içinden - görsel olarak iç kelimeyi seçerek ) ve Qçift tırnak için tuşuna basıyorum veya qtek tırnak için basıyorum.
Teklifleri Kaldırma
vnoremap s <esc>:call StripWrap()<cr>
function! StripWrap()
normal `>x`<x
endfunction
Ben vim tırnak metin nesneleri olarak davranır vim-textobj-tırnak kullanın . Yapabileceğim Bu araçlar vaq
(görsel seçmek tırnak çevresindeki Bu bulgular yakın tırnak. Ve görsel onları seçer. (Bu isteğe bağlıdır, sadece böyle bir şey yapabilirsiniz f"vww
). Sonra basın s
için şerit seçimden tırnak.
Teklifleri Değiştirme
ÖPÜCÜK. Ben tırnak kaldırmak sonra tırnak ekleyin . 1. remove tek tırnak: Örneğin, çift tırnak ile tek tırnak yerine, ben adımlarını yapması gerekiyordu vaqs
, 2. yeni tırnak işareti koyun: vwQ
.
Vim eklentisini kullanıyorsanız https://github.com/tpope/vim-surround (veya önceden yüklenmiş vim-surround ile birlikte gelen VSCode Vim eklentisini) kullanıyorsanız, oldukça rahat!
Ekle
ysiw' // surround in word `'`
düşürmek
ds' // drop surround `'`
değişiklik
cs'" // change surround from `'` to `"`
Html etiketleri için bile çalışır!
cst<em> // change surround from current tag to `<em>`
daha iyi örnekler için github'daki benioku dosyasına bakın
Bir kelimeyi alıntılamak ve işaretini kaldırmak için kullanılabilecek bazı basit eşlemeler şunlardır:
" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>
qw
qd
wq
Vscode için VIM awsomely yapar. Vscode kullanmıyorsanız bir vim-surround tabanlı .
Bazı örnekler:
"test" imlecin içinde cs tipinde tırnak işareti "" ile sonuçlanır
"imleç ds tırnak işaretleri ile" test "ile bitirmek
"test" imlecin içinde cs tip tırnak işaretleri ile "t" ve <123> testi ile bitirmek için 123> girin
(test) ile bitirmek için kelime test tipi ysaw'da imleç ile test)
.Vimrc dosyamda nnoremap kullanıyorum
Bir kelimeyi tek tırnak içine almak için:
nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl
Tırnak işaretlerini kaldırmak için (çift tırnak işaretleri üzerinde de çalışır):
nnoremap qs :silent! normal mpeld bhd `ph<CR>
Hatırlanması gereken kural: 'sq' = tek tırnak.
buna ne dersin?
:%s/\'/"/g
%
tüm dosyayı seçmedikçe sadece mevcut satırda çalışır
Bunu yapan bir senaryo yazdım:
function! WrapSelect (front)
"puts characters around the selected text.
let l:front = a:front
if (a:front == '[')
let l:back = ']'
elseif (a:front == '(')
let l:back = ')'
elseif (a:front == '{')
let l:back = '}'
elseif (a:front == '<')
let l:back = '>'
elseif (a:front =~ " ")
let l:split = split(a:front)
let l:back = l:split[1]
let l:front = l:split[0]
else
let l:back = a:front
endif
"execute: concat all these strings. '.' means "concat without spaces"
"norm means "run in normal mode and also be able to use \<C-x> characters"
"gv means "get the previous visual selection back up"
"c means "cut visual selection and go to insert mode"
"\<C-R> means "insert the contents of a register. in this case, the
"default register"
execute 'norm! gvc' . l:front. "\<C-R>\"" . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>
Kullanmak için bir şeyi vurgulayın, l kontrolüne basın ve ardından bir karakter yazın. Eğer işlevin bildiği karakterlerden biriyse, doğru sonlandırma karakterini sağlayacaktır. Değilse, her iki tarafa eklemek için aynı karakteri kullanır.
Surround.vim bundan daha fazlasını yapabilir, ancak bu ihtiyaçlarım için yeterliydi.