Подтвердить что ты не робот

Как изменить разрешение файла из vi

Иногда я открываю файл только для чтения в vi, забывая сделать chmod +w, прежде чем открывать его. Есть ли способ изменить файл из vi?

Что-то вроде !r chmod +w [filename]?

Есть ли ярлык для ссылки на текущий открытый файл без написания его длинного имени?

4b9b3361

Ответ 1

Просто используйте

:!chmod +w %

в командном режиме. % будет заменено текущим именем файла.

Ответ 2

Если у вас есть права на запись в файл, вы можете просто использовать восклицательный знак, чтобы заставить его:

:w!

Если у вас нет прав и вам нужно изменить пользователя, но все же хотите записать в файл, иногда вы можете пойти на что-то вроде

:w !sudo tee %

Ответ 3

Я знаю, что это старый пост, но с 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" в текущем каталоге.

Ответ 4

Вы пробовали

!chmod +w %

.% представляет текущее имя файла.

Вы также можете сопоставить ключ для этого, например, Ctrl-W.

:map <C-w> :!chmod +w %<CR>

Обратите внимание, что вы набираете Ctrl-V Ctrl-M, чтобы получить <CR>

Ответ 5

После редактирования файла с помощью vim нажмите "esc", а затем ":". Затем введите следующую команду:

w !sudo tee %

Затем нажмите "Enter". Затем введите

:q!

чтобы успешно выйти из редактора.

Ответ 6

:!chmod <perms> <file>

и если vi все еще не хочет его записывать,

:se cpo-=W

Ответ 7

Как отметил Дэвид, 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>