Как изменить разрешение файла изнутри vi - PullRequest
23 голосов
/ 22 октября 2009

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

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

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

Ответы [ 6 ]

53 голосов
/ 22 октября 2009

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

:!chmod +w %

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

35 голосов
/ 22 октября 2009

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

:w!

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

:w !sudo tee %
9 голосов
/ 03 августа 2017

Я знаю, что это старый пост, но в Vim Version8 была включена функция, с помощью которой вы можете изменять права доступа к файлам.

Согласно файлу version8.txt:

setfperm () устанавливает права доступа к файлу

Затем эту функцию можно вызвать с помощью команды call в Vim.

Это делается следующим образом:

:call setfperm("file name","permissions")

Структура строки «permissions» принимает ту же форму, что и описанная в документации Vim:

getfperm ({fname}) getfperm () Результатом является строка, которая является чтение, запись и выполнение разрешения данного файла {имя_файла}. Если {fname} не существует или его каталог не может быть прочитан, пустая строка возвращается. Результат имеет вид "rwxrwxrwx", где каждая группа Флаги "rwx" представляют, в свою очередь, права владельца файла, группа, к которой принадлежит файл, и другие пользователи. Если у пользователя нет данного разрешения, флаг для этого заменяется строкой "-". Пример: : echo getfperm ("/ etc / passwd") Надеемся, что это (с точки зрения безопасности) покажет строка "rw-r - r--" или даже "rw -------".

Минимальный пример:

:call setfperm("foo.txt","rwxrwxrwx")

Это добавляет права на чтение, запись и выполнение файла "foo.txt" в текущем каталоге.

6 голосов
/ 22 октября 2009

Вы пробовали

!chmod +w %

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

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

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

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

2 голосов
/ 25 октября 2017

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

w !sudo tee %

Затем нажмите «Ввод». Затем введите

:q!

для успешного выхода из редактора.

1 голос
/ 22 октября 2009
:!chmod <perms> <file>

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

:se cpo-=W
...