Чи існує спосіб отримання псевдоніма `: w'` до`: w`, щоб уникнути створення файлів з назвою '?


9

Іноді мій рожевий буде пасти 'ключ, дотягуючись до входу, в результаті чого :w'<Enter>.

Я спробував:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

Жоден з них не працює. Чи є спосіб створити псевдонім :w'для :w?

Я також використовую cmdwin ( :help cmdwin+ nnoremap : :<C-F>) замість звичайного командного рядка, тому бонусні бали, якщо він працює і там.


3
ха-ха; У мене така ж проблема з \
Мартін Турной

Відповіді:


8

Як зазначає Пітер Рінкер, cmaps може розширюватися і в інших місцях, тож cnoreabbrevбуло б краще :

cnoreabbrev w' w

Або, найбезпечніше, знову ж таки завдяки Петру:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

Чітко перевіривши, чи містить командний рядок лише w'непотрібні розширення в ситуаціях.

Ви можете використовувати cmap:

cmap w' w

Вам все одно доведеться натискати Enter, але випадковість зараз 'слід ігнорувати.

Якщо ви використовуєте cmdwin, inoremapнабір autocmdможе бути корисним:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

Я бігав :cmap w' w, але змін у поведінці не було. :w'все ще призводить до написання файлу з назвою '. "'" [New] 0L, 0C written.
mwcz

@mwcz Чи з'являється 'насправді, коли ви натискаєте його після w? Це не повинно, якщо cmapфайл успішно створено - cmap LHS автоматично заповнюється RHS, тому якщо ви натиснете a ', він все одно повинен відображатися w.
муру

1
Будьте обережні з голими cmap«s і cabbrev» с. Вони будуть виконуватися / розширюватися в інших режимах та інших місцях. наприклад :s/'follow'/fooі /'follow'. Будь ласка, подивіться наступні зміни vim: x функція для видалення буфера замість збереження & виходу або використання cmdalias.vim
Peter Rincker

1
Краще безпечно, ніж вибачте:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Пітер Рінкер

Так, 'все ще з’являється, але я просто зрозумів, що це тому, що я використовую cmdwin для введення команд, а cmdwin - це просто звичайний буфер, тому cmap/cnoreabbrevне працюйте там. Оновлення відповіді за допомогою noreabbrevпараметра для користувачів cmdwin. :) Дякую!!!
mwcz

0

Цей метод працює для мене:

:ca w' w

Крім того, ви можете налаштувати свій vim для збереження поточного буфера при натисканні клавіші Esc, наприклад,

:map <Esc><Esc> :w<CR>

Або скористайтеся наступним відображенням, щоб зберегти файл або Ctrl+, sабо F2:

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

Примітка: F2 зберігає лише при необхідності і повертає користувача в режим вставки (або відновлює їх візуальний вибір), за необхідності.

Джерело: Збереження файлу на vim wikia

Або скористайтеся такими альтернативами:

  • :up( :update) для:w
  • ZQ для :q
  • ZZдля :wqабо:x

Зверніть увагу на лапки у питанні. :w', не :w. Я хочу використовувати :wбез випадкового попадання ', який записує файл, який я повинен тоді rm \'. Хоча гарні поради.
mwcz

1
Ctrl-S не надсилає реєстрацію - якщо програма зупиняється, можливо, тому буфер був заповнений. Див unix.stackexchange.com/questions/13629 / ... '
Муру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.