Tại sao tôi không có tô sáng cú pháp khi tôi sudo vi <tên tệp>?


27

Tôi không hiểu cách cho phép tô sáng cú pháp trong các tệp tôi đang chỉnh sửa qua vi khi sử dụng sudo. Khi tôi sudo vi <filename>thiết bị đầu cuối chỉ có màu đen và trắng trong cài đặt thiết bị đầu cuối của tôi. Trong vi nếu tôi nhập :syntax onkhông có gì thay đổi.

Khi tôi vi <filename>tất cả các cú pháp được tô màu đúng. Sử dụng RHEL 5.4, env có liên quan:

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;
33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;
32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;
32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;
31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;
31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;
35:*.png=01;35:*.tif=01;35:

SHELL=/bin/bash

TERM=xterm-color

3
vikhông hỗ trợ màu sắc, vì vậy mọi thứ hiển thị màu đang chạy vimhoặc tương tự.
Chris S

Câu trả lời:


26

Larks trả lời có lẽ là có khả năng nhất. Bạn có thể không muốn thay đổi tài khoản root vi của mình thành vim vĩnh viễn vì nếu tài nguyên của bạn thấp vi gần như được đảm bảo để luôn hoạt động, tôi không chắc chắn về vim.

Bạn có thể đang sử dụng (màu)

/usr/bin/vim 

dưới người dùng bình thường của bạn và

/bin/vi

dưới sudo hoặc root. Bạn có thể kiểm tra bằng cách sử dụng:

which vi

một lần dưới người dùng bình thường của bạn và người khác thông qua sudo

sudo which vi

Làm một

man which 

nếu bạn cần thêm chi tiết


Tôi đã không thay đổi tài khoản root để sử dụng vim nhưng chỉ biết rằng điều đó cho thấy vi đã được đặt bí danh cho vim vì người dùng của tôi bảo tôi sử dụng sudo vim <file> thay vì sudo vi <file>
Scott Lundgren

17

Trên hệ thống RHEL, /bin/vithường là phiên bản tối thiểu vim, không có bất kỳ hỗ trợ đánh dấu cú pháp nào. /usr/bin/vimlà biên tập viên đầy đủ tính năng. Rất có khả năng trong môi trường người dùng của bạn, vilà một bí danh cho vim. Thử đi:

sudo vim /some/file

Bạn có làm nổi bật cú pháp bây giờ?


Vâng! và có vẻ như câu trả lời của tội lỗi là câu tôi cần để có được hành vi tôi muốn
Scott Lundgren

11

viCó lẽ bạn là /bin/vitừ gói vim-minimalkhông hỗ trợ đánh dấu cú pháp. sudo vira mắt /bin/vicho bạn

Bash chỉ mở rộng bí danh trên từ đầu tiên trong dòng lệnh của bạn, vì vậy trong:

sudo vi

vikhông được thay thế vimngay cả khi bạn có bí danh đó được xác định.

Giải pháp được xác định một bí danh khác (cho người dùng gọi sudo):

bí danh sudo = 'sudo'

Lưu ý không gian sau lần thứ hai sudo.

Sử dụng này sudo, bash sẽ làm mở rộng bí danh cho vitrong sudo vi. Trong aliasphần của Bash doc, nó nói:

Nếu ký tự cuối cùng của giá trị bí danh là trống, thì từ lệnh tiếp theo sau bí danh cũng được kiểm tra để mở rộng bí danh.

Sau khi bạn nhập lệnh của bạn, Bạn có thể bấm Ctrl+ Alt+ Etrong bashđể xem kết quả mở rộng.

Tín dụng:

https://bbs.archlinux.org/viewtopic.php?id=36796

http://www.shellperson.net/USE-sudo-with-an-alias


Chỉ đơn giản là răng cưa vitrong /root/.bashrcsẽ không hoạt động.

Cũng có thể lưu ý rằng vikhông được đặt bí danh cho root trên một số distro trong /etc/profile.d/vim.sh:

if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID=`/usr/bin/id -u`
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

Thay đổi điều này cũng sẽ không giải quyết được vấn đề.


Thủ thuật tuyệt vời để có bí danh với sudo!
Corey Henderson

Yêu cái này - đơn giản và thanh lịch !!! Đây là câu trả lời chính xác.
PhimJ

3

Theo mặc định trong 5,4 vi là mặc định. Tôi quên phiên bản đã bắt đầu. Điều này sẽ thêm bí danh cần thiết cho bạn:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF

2

tôi thấy rằng trong phiên bản vim của tôi (cài đặt sudo apt-get install vimtrên debian 7), syntax onlệnh được xác định trên cơ sở cho mỗi người dùng ~/.vimrc. tuy nhiên theo mặc định, cài đặt không tạo /root/.vimrctập tin sudo viđể tải. Vì vậy, tôi chỉ sao chép ~/.vimrcvào /root/thư mục và điều này đã lừa:sudo cp ~/.vimrc /root/


1

Điều này là do người dùng root của bạn không có tệp cấu hình vim. vì vậy chỉ cần sao chép tập tin cấu hình vim người dùng chuẩn của bạn vào thư mục gốc.

sudo cp -r ~/.vi* /root/ một cái gì đó như thế

nb: kiểm tra xem bạn chưa có tệp tương ứng ~/vi*với vim không.


0

1) Kiểm tra xem bạn có thực sự sử dụng vim chứ không phải vi (không may là mặc định thường xuyên trên các hệ thống được cài đặt mới)

2) Kiểm tra xem bạn /etc/vim/vimrccó đường dây khôngsyntax on

3) Không phải tất cả các loại tệp đều có thông tin đánh dấu cú pháp theo mặc định ....


Không có / etc / vim / vimrc, nhưng / etc / vimrc đã có tô sáng cú pháp theo mặc định: if & t_Co> 2 || có cú pháp ("gui_rucky") trên bộ hlsearch endif
Scott Lundgren

-1

Đối với những người vẫn đang tìm kiếm sự giúp đỡ, hãy thử các lệnh này.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Nếu hai địa điểm này giống nhau, thì đừng tiếp tục.

Nếu không thì...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (liên kết tượng trưng)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.