Ответ 1
Просто используйте
:!chmod +w %
в командном режиме. % будет заменено текущим именем файла.
Иногда я открываю файл только для чтения в vi, забывая сделать chmod +w
, прежде чем открывать его. Есть ли способ изменить файл из vi?
Что-то вроде !r chmod +w [filename]
?
Есть ли ярлык для ссылки на текущий открытый файл без написания его длинного имени?
Просто используйте
:!chmod +w %
в командном режиме. % будет заменено текущим именем файла.
Если у вас есть права на запись в файл, вы можете просто использовать восклицательный знак, чтобы заставить его:
:w!
Если у вас нет прав и вам нужно изменить пользователя, но все же хотите записать в файл, иногда вы можете пойти на что-то вроде
:w !sudo tee %
Я знаю, что это старый пост, но с Vim Version8 включена функция, с помощью которой вы можете изменять права доступа к файлам.
В соответствии с файлом version8.txt:
setfperm() устанавливает разрешения файла
Затем эту функцию можно вызвать с помощью команды "вызов" в Vim.
Это делается следующим образом:
:call setfperm("file name","permissions")
Структура строки "permissions" принимает тот же вид, что и в документации Vim:
getfperm ({fname}) getfperm() Результатом является String, который является чтением, записью и выполнением разрешений для данного файла {fname}. Если {fname} не существует или его каталог не может быть прочитан, пустая строка возвращается. Результат имеет вид "rwxrwxrwx", где каждая группа Флаги "rwx" представляют, в свою очередь, разрешения владельца файла, группы, к которой принадлежит файл, и других пользователей. Если у пользователя нет определенного разрешения, флаг для этого заменяется на строку "-". Пример: : echo getfperm ( "/etc/passwd" ) Это, мы надеемся (с точки зрения безопасности) строка "rw-r - r--" или даже "rw -------".
Минимальный пример:
:call setfperm("foo.txt","rwxrwxrwx")
Это добавляет права на чтение, запись и выполнение файла "foo.txt" в текущем каталоге.
Вы пробовали
!chmod +w %
.% представляет текущее имя файла.
Вы также можете сопоставить ключ для этого, например, Ctrl-W.
:map <C-w> :!chmod +w %<CR>
Обратите внимание, что вы набираете Ctrl-V Ctrl-M, чтобы получить <CR>
После редактирования файла с помощью vim нажмите "esc", а затем ":". Затем введите следующую команду:
w !sudo tee %
Затем нажмите "Enter". Затем введите
:q!
чтобы успешно выйти из редактора.
:!chmod <perms> <file>
и если vi все еще не хочет его записывать,
:se cpo-=W
Как отметил Дэвид, setfperm() - это способ сделать это в vim.
Вот сопоставления, которые я использую для добавления разрешений на запись или выполнение в текущий файл:
function! ChmodPlus(expr, pat)
let file = expand('%')
let oldperms = getfperm(file)
let newperms = substitute(oldperms, a:expr, a:pat, '')
if (oldperms != newperms)
call setfperm(file, newperms)
endif
echom(printf('Permissions: %s', newperms))
endfunction
function! ChmodPlusX()
call ChmodPlus('^\(..\).', '\1x')
endfunction
function! ChmodPlusW()
call ChmodPlus('^\(.\).', '\1w')
endfunction
" Make current file writeable
noremap <silent> <Leader>W :call ChmodPlusW()<CR>
" Make current file executable
noremap <silent> <Leader>X :call ChmodPlusX()<CR>