使 vim 正确缩进管道 while 循环
Make vim properly indent piped while loop
我一直在用这行代码读取ip_list.txt
中的ip 1.1.1.1
,存入变量line
然后打印出来:
if [ true == false ]; then # Example
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done
fi
代码运行良好,但 vim 没有正确缩进此代码。当我这样做时,g=GG
,您可以看到 done
语法应该排在 grep
语法下方,但它与 if
语句一起排在左侧。它会在 vim:
中像这样缩进
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done # Went to the left. Not lined up with grep
fi
即使我删除了 ;
,并让底部的 do
像这样:
if [ true == false ]; then # Example
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done
fi
done
语法在 vim 代码编辑器中仍然没有正确缩进(现在如果我这样做 g=GG
):
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done # not lined up with grep syntax
fi
有什么方法可以编辑此代码,以便 vim 可以正确缩进它?
预期的输出应该是:
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done
fi
或者应该是
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done
fi
vim 的缩进正则表达式不够智能。如果您愿意,可以自己编辑语法文件:使用 :scriptnames
查看由 vim 加载的文件,查看 syntax/sh.vim
文件的完整路径。
一种更简单的方法是更改您的 bash 语法:
if [ true == false ]; then # Example
ip="1.1.1.1"
while read -r line; do
echo "Line is: $line"
done < <(grep -r $ip ip_list.txt )
fi
正确缩进到
if [ true == false ]; then # Example
ip="1.1.1.1"
while read -r line; do
echo "Line is: $line"
done < <(grep -r $ip ip_list.txt )
fi
我一直在用这行代码读取ip_list.txt
中的ip 1.1.1.1
,存入变量line
然后打印出来:
if [ true == false ]; then # Example
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done
fi
代码运行良好,但 vim 没有正确缩进此代码。当我这样做时,g=GG
,您可以看到 done
语法应该排在 grep
语法下方,但它与 if
语句一起排在左侧。它会在 vim:
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done # Went to the left. Not lined up with grep
fi
即使我删除了 ;
,并让底部的 do
像这样:
if [ true == false ]; then # Example
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done
fi
done
语法在 vim 代码编辑器中仍然没有正确缩进(现在如果我这样做 g=GG
):
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done # not lined up with grep syntax
fi
有什么方法可以编辑此代码,以便 vim 可以正确缩进它?
预期的输出应该是:
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line ; do
echo "Line is: $line"
done
fi
或者应该是
if [ true == false ]; then
ip="1.1.1.1"
grep -r $ip ip_list.txt | while read -r line
do
echo "Line is: $line"
done
fi
vim 的缩进正则表达式不够智能。如果您愿意,可以自己编辑语法文件:使用 :scriptnames
查看由 vim 加载的文件,查看 syntax/sh.vim
文件的完整路径。
一种更简单的方法是更改您的 bash 语法:
if [ true == false ]; then # Example
ip="1.1.1.1"
while read -r line; do
echo "Line is: $line"
done < <(grep -r $ip ip_list.txt )
fi
正确缩进到
if [ true == false ]; then # Example
ip="1.1.1.1"
while read -r line; do
echo "Line is: $line"
done < <(grep -r $ip ip_list.txt )
fi